我有一个 C 程序可以进行以下比较:
void compare(char** args) {
if (find_in_args(args, ">") != -1) {
printf("In > block");
}
else if (find_in_args(args, "<") != -1) {
printf("In < block");
}
else if (find_in_args(args, "|") != -1) {
printf("In | block");
}
}
哪里find_in_args()
迭代 char*
的数组像这样:
int find_in_args(char** args, char* target) {
int found = -1;
int i = 0;
while (i != 10) {
if (strcmp(args[i], target) != 0)
++i;
else {
found = i;
break;
}
}
return found;
}
如果target
恰好是“">”,程序输出In > block
。如果target
恰好是“<”或“|”,程序输出Segmentation fault (core dumped)
。
但是,如果我将“<” block 移到第一个,程序将输出 In < block
如果 target
则会给出段错误错误恰好是“>”或“|”。
看来迭代了 char*
的比较使用 strcmp()
的数组只能发生一次。我尝试过复制 args
每次调用 find_in_args
并在副本上进行比较,但出现同样的问题。
有谁知道为什么我只能调用比较函数一次,如果是的话,如何做到这样我可以调用比较函数 n 次而不会出现段错误?
最佳答案
该问题是由 while
循环中的 i != 10
引起的。更改 while
循环以根据条件 args[i] != NULL
进行迭代将解决该问题。
关于c - 多个 char* 比较的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39825610/