我正在尝试读取文件并将等号的左侧与右侧分开,然后查看左侧是否为“HOME”。它发现第一个标记是“HOME”,但无法说明它是否等于“HOME”。基本上,文件中写入的行是“HOME =/cs/nsf
”。
出了什么问题?
while (fgets(buffer,80,file)) //while end of file
{
char *token = strtok(buffer,"=");
printf("first token: %s\n",token); //this correctly prints "HOME"
if (strcmp(token,"HOME") == 0)
{
printf("it doesn't get here");
token = strtok(NULL,"\n"); //this should return "/cs/nsf" but it doesn't;
if (token == NULL || strcmp(token," ") == 0)
{
fprintf(stderr,"HOME isn't initialised\n")
}
}
}
最佳答案
好吧,由于您使用 =
作为 strtok
的唯一分隔符,因此您的第一个标记将在输入中包含 =
之前的空格字符串。因此,您解析的第一个标记实际上是 "HOME "
。这就是您的 printf
正在打印的内容。您只是看不到末尾的空格。
显然,“HOME”
与“HOME”
不同。在 strtok
的分隔符列表中添加空格。
关于c - 使用 strtok() 进行 token 识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13055180/