使用strcmp(Ubuntu)进行分段故障

时间:2016-02-25 02:03:17

标签: c ubuntu token strtok

我有以下代码段:

token = strtok(line, separator);
i = 0;
args[i++] = token;  /* build command array */
while( token != NULL ) /* walk through other tokens */
{
    /* printf( " %s\n", token ); */
    token = strtok(NULL, separator);
    if (strcmp(token, "|") != 0) {
        printf("entered");
    }
    else {
        args[i++] = token;
    }   /* and build command array */

代码编译正常,但在执行时传递任何参数,我收到错误“Segmentation fault(Core dumped)”。删除比较2个字符串的if语句可以解决问题,因此这个比较存在问题。

2 个答案:

答案 0 :(得分:1)

strtok找不到下一个令牌时,它会返回NULL,因此在尝试strcmp(NULL, "|")

时会出现段错误

token之前测试strcmp是否为空。

答案 1 :(得分:0)

发布的代码:

token = strtok(line, separator);
i=0;
args[i++]=token;  /* build command array */
while( token != NULL ) /* walk through other tokens */
{
  /* printf( " %s\n", token ); */
  token = strtok(NULL, separator);
  if (strcmp(token, "|") != 0) {
      printf("entered");
  }
  else {
      args[i++] = token;
  }   /* and build command array */

包含逻辑错误。在检查之前,正在使用strtok()的返回值。

建议类似于:

i=0;
token = strtok(line, separator);

while( token != NULL ) /* walk through other tokens */
{
    /* printf( " %s\n", token ); */
    if (strcmp(token, "|") != 0)
    {
        printf("entered");
    }

    else
    {
        args[i++] = token;
    }   /* and build command array */

    ...
    token = strtok(NULL, separator);
} // end while