Reading and parsing lines from a file with fgets and strtok

扶醉桌前 提交于 2019-12-01 06:47:29

strtok returns a pointer to a null-terminated string containing the next token. To actually copy this token, you should use strcpy:

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

Also note that there is a memory leak in your code:

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

You dynamically allocate the buffer by calling malloc, but you don't free this memory. Don't forget to call free() on a pointer pointing to the memory that has been allocated by malloc. But in this case, the array with automatic storage duration would be a better choice:

void readLinesFromFile(/*...*/)
{
    char buffer[MAX_LINE];
    // ...
    fgets(&buffer, MAX_LINE, fPtr);
    // ...
}

You didn't copy out the name, you just put the pointer returned by strtok into your data structure. You are just ending up with a data structure full of identical pointers to the same memory pointed to by buffer. Since the contents of buffer get modified on every pass through the loop, you end up with a bunch of pointers to whatever it was the last time through.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!