c - 使用 strtok() 进行 token 识别

标签 c pointers

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

相关文章:

c - 没有 atoi/isdigit 的字符串到 Int

c - char * x,y,z;char* x,y,z;char (*)x,y,z; 和有什么区别?

c++ - C++ 中的多态返回类型

c - fread() 中的 "size"参数指的是什么?

c - 在 Minix 中制作设备驱动程序

c - 如何用 C 语言实现这种外部合并排序算法?

c++ - C/C++ : Converting hexadecimal value in char to integer

c - 添加对指针的操作

C++ 复制指针指向的数据

接收指向结构的二维数组的指针的 C 函数