-1

我正在尝试读取文件并将等号的左侧与右侧分开,并查看左侧是否为“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")
       }
    }
}
4

6 回答 6

3

好吧,由于您用作=的唯一分隔符strtok,因此您的第一个标记将=在输入字符串中包含 之前的空格。所以你解析的第一个标记实际上是"HOME ". 这就是您printf正在打印的内容。你只是看不到最后的空间。

显然,"HOME "不一样"HOME"。为 .的分隔符列表添加空格strtok

于 2012-10-24T18:12:09.273 回答
2

它必须打印“第一个令牌:HOME”(HOME 后面有一个空格)。

于 2012-10-24T18:14:25.140 回答
1

您需要从令牌末尾修剪空格。它可能正在打印"HOME "(注意额外的空间)。

于 2012-10-24T18:13:24.177 回答
1

你的第一个 printf 打印"HOME "。您应该将"= \t"其用作令牌字符串,以使其返回"HOME"(而不是任何空格)。

于 2012-10-24T18:17:54.453 回答
0

文件中的 HOME 后面有一个空白。

采用:

printf("first token <<%s>>\n", token);

看到问题。然后在比较之前去掉前导和尾随空格。<<请注意,使用类似和>>(您可以看出我不太使用 XML 文本)显式标记字符串的开头和结尾可以更容易地查看前导和尾随空格以及其他意外效果。我一直认为这是一项有价值的技术。

于 2012-10-24T18:12:58.030 回答
0
HOME = /cs/nsf

所以实际上之前的第一个标记不是"HOME"但是"HOME "- 注意左边的空间。

要么" = "用作第二个参数,strtok()要么写strcmp(token, "HOME ")来实现你想要的。

于 2012-10-24T18:13:01.800 回答