b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

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

电脑杂谈  发布时间:2020-07-07 16:31:53  来源:网络整理

fgets读取多行_fgets读取多行_fgets读取整个文件

我在使用相当基本的代码时遇到了麻烦. 我需要从下面显示的文件中读取每一行,使用strtok将其分为3部分fgets读取多行,并将每一部分存储到一个数组中. “目标”和“帮助器”数组可以正常工作,但是由于某些原因,整个名称数组中填充了从文件中读取的姓氏.

输入文件:

fgets读取多行_fgets读取整个文件_fgets读取多行

Redden 2 0
Berglund 5 2
Jackman 2 0
Stewart 4 0
Oshie 3 5
McDonald 2 4
Pietrangelo 2 7
Perron 2 6
Tarasenko 5 5

相关代码:

fgets读取整个文件_fgets读取多行_fgets读取多行

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"));
    }
  }
}

由于某种原因fgets读取多行,nameArray [0-9]包含“ Tarasenko”,在此方面的任何帮助将不胜感激.

fgets读取多行_fgets读取整个文件_fgets读取多行

最佳答案

strtok返回指向包含下一个标记的以空终止的字符串的指针. 要实际复制此令牌,您应该使用

fgets读取多行_fgets读取整个文件_fgets读取多行

strcpy:

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

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

void readLinesFromFile(/*...*/)
{
    char * buffer = malloc(MAX_LINE*sizeof(char));
    // ...
    fgets(buffer, MAX_LINE, fPtr);
    // ...
}

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-271928-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...