c – 使用fgets和strtok从文件中读取和解析行

c – 使用fgets和strtok从文件中读取和解析行,第1张

概述我在使用相当基本的代码时遇到了麻烦.我需要从下面显示的文件读取每一行,用strtok将它分成3个部分,并将每个部分存储到一个数组中. “目标”和“助手”的数组工作正常,但由于某种原因,整个名称数组都填充了从文件中读取的姓氏. 输入文件: Redden 2 0Berglund 5 2Jackman 2 0Stewart 4 0Oshie 3 5McDonald 2 4Pietrange 我在使用相当基本的代码时遇到了麻烦.我需要从下面显示的文件中读取每一行,用strtok将它分成3个部分,并将每个部分存储到一个数组中. “目标”和“助手”的数组工作正常,但由于某种原因,整个名称数组都填充了从文件中读取的姓氏.

输入文件:

Redden 2 0Berglund 5 2Jackman 2 0Stewart 4 0OshIE 3 5McDonald 2 4PIEtrangelo 2 7Perron 2 6Tarasenko 5 5

相关代码:

int main(int argc,char* argv){      file* infile = fopen(argv[1],"r");    char ** nameArray;    int * goalArray;    int * assistArray;    int size = countlinesInfile(infile);    allocateMemory(&goalArray,&assistArray,&nameArray,size);    readlinesFromfile(infile,goalArray,assistArray,nameArray,size);}voID allocateMemory(int** goals,int** assists,char*** names,int size){  *goals = malloc(size*sizeof(int));  *assists = malloc(size*sizeof(int));  *names = malloc(size*sizeof(char *));  int i;  for(i=0; i<size; i++)  {    *(*names + i) = calloc(MAX_name,sizeof(char));  }}voID readlinesFromfile(file* fPtr,int* goals,int* assists,char** names,int numlines){  int i;  char * buffer = malloc(MAX_liNE*sizeof(char));  for(i = 0; i<numlines; i++)  {    if(fgets(buffer,MAX_liNE,fPtr)!= NulL)    {      names[i] = strtok(buffer," \n");      goals[i] = atoi(strtok(NulL," \n"));      assists[i] = atoi(strtok(NulL," \n"));    }  }}

出于某种原因,nameArray [0-9]都包含“Tarasenko”,对此的任何帮助将不胜感激.

解决方法 strtok返回一个指向包含下一个标记的以null结尾的字符串的指针.要实际复制此令牌,您应该使用 strcpy

strcpy(names[i],strtok(buffer," \n"));strcpy(goals[i],atoi(strtok(NulL," \n")));strcpy(assists[i]," \n")));

另请注意,代码中存在内存泄漏:

voID readlinesFromfile(/*...*/){    char * buffer = malloc(MAX_liNE*sizeof(char));    // ...    fgets(buffer,fPtr);    // ...}

您通过调用malloc动态分配缓冲区,但不释放此内存.不要忘记在指向由malloc分配的内存的指针上调用free().但在这种情况下,具有自动存储持续时间的阵列将是更好的选择:

voID readlinesFromfile(/*...*/){    char buffer[MAX_liNE];    // ...    fgets(&buffer,fPtr);    // ...}
总结

以上是内存溢出为你收集整理的c – 使用fgets和strtok从文件中读取和解析行全部内容,希望文章能够帮你解决c – 使用fgets和strtok从文件中读取和解析行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存