我正在尝试使用fgets和strtok_s读取带有一些令牌的文件,我想使用strtok,但这并不安全,而且在如何使用它方面找不到任何好的示例。经过一些检查后,发生了什么事,它仅从文件中读取单词,例如令牌之前的第一个单词(即,如果字符串为“ 1,2,3,4,5,1”,而令牌为“,”,因此它将在同一循环中读取两次两次,并退出while循环。 代码:
int val_to_add = 0;
TreeNode * head = new TreeNode(NIL,NIL,NIL,NIL);
FILE * fp;
char line[MAX_LINE];
char *pstr;
errno_t err;
char * context = NULL;
if (argc == 1)
{
//There was no file option.
}
else
{
if ((err = fopen_s(&fp, argv[1], "r")) != 0)
{
fprintf(stderr, "ERROR!\nCannot open file '%s'.\n",argv[1]);
exit(1);
}
while (fgets(line, MAX_LINE, fp) != NULL)
{
pstr = strtok_s(line, ",", &context);
val_to_add = atoi(pstr);
add_treenode(head, val_to_add);
printf("%s\n",pstr);
}
}
为什么循环只工作一次?