I\'m having trouble with a fairly basic bit of code. I need to read each line from the file shown below, split it up into the 3 parts with strtok, and store each part into a
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.
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);
// ...
}