我想从.txt文件中获取一个字符串数组。我尝试使用fgets然后使用strtok来分隔字符串。我认为我的fgets是错的,但我不明白如何得到我想要的。
char* str[numWords];
char line[] = fgets(str, numCharTotal, filep);
char delim[] = " ";
int j;
for(j = 0; j != numWords; j++)
{
str[j]= strtok(line, delim);
}
换句话说,我有一个.txt文件
This is a txt file
我希望能够以的形式
char* str[] = {"This","is","a","txt","file"};
printf("%s", str[0]) //then "This" is printed
//...
//Till last word of txt file
//...
printf("%s", str[4]) //then "file" is printed
fgets将从文件中读取一行并将其存储在字符串中。您需要为缓冲区分配内存(代码中的char数组行(。在以char数组行作为第一个参数调用strtok之后,循环调用第一个参数为NULL的strtok。如果继续传递char数组行,则只会获得循环每次迭代的第一个标记(单词(。
char *str[numWords];
char line[numCharTotal];
char delim[] = " ";
int j = 0;
fgets(line, numCharTotal, filep);
char *token = strtok(line, delim);
while (token != NULL) {
str[j] = token;
++j;
token = strtok(NULL, delim);
}
for (int i = 0; i < numWords; ++i) {
printf("%sn", str[i]);
}
您应该放入以下语句:
line = fgets(str, numCharTotal, filep);
在循环之外,使用循环一次读取一个单词的"line"。
目前,循环的第一次迭代读取第一行,然后读取第一个单词。然后其他迭代将尝试读取文件的下一行,这些行是空的