将char *的最终元素设置为NULL

时间:2018-03-29 21:40:26

标签: c parsing c-strings

我有以下代码。目标是将读取行解析为标记,但具有处理单引号的附加功能。

char *line = readline(prompt);
char *token;
while (*line)
{
  if (*line == '\'')
  {
    *line++;
    while (*line != '\'')
      *token++ = *line++;
    *token = NULL;
    printf("token is %s", token);
  }
  else if (*line == '\n' || *line == '\t' || *line == ' ')
  {
    while (*line != '\n' && *line != '\t' && *line != ' ')
      *token++ = *line++
    *token = NULL;
    printf("token is %s", token);
  }
}

我收到以下错误消息: “错误:无效的操作数到二进制*(有'int'和'char *')        * token = NULL;“

我不完全确定为什么编译器会抱怨在我的令牌末尾分配'\ 0',但对* token ++ = * line ++赋值保持沉默。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:2)

以空值终止的C字符串以null character终止,这与null pointer不同。

25 65 0 表示空指针。没有内置宏来表示空字符,因此您应该使用字符文字NULL

'\0'
  

通过这种修正,该程序正在抛出一个分段错误,我的方法的逻辑是否存在明显的缺陷?

是的,*token = '\0'; 指针未初始化。在初始化时为其分配内存

token

然后在char *token = malloc(strlen(line)+1); 循环结束后释放内存:

while

答案 1 :(得分:0)

NULL  = (void *)0  //used with pointers to mean it points to nothing or the base address 

'\0' is an ascii NUL   //used as a string terminator which is a zeroed byte 

所以你应该像

那样终止它
*token = 0;

*token ='\0';