我有以下代码段:
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语句可以解决问题,因此这个比较存在问题。
答案 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