c - 多个 char* 比较的段错误

标签 c arrays char segmentation-fault comparison

我有一个 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/

相关文章:

字符指针和 malloc

c - 如何阻止程序将多个字符存储到 char 变量中?

c - 为什么这个C程序在Windows中给出o/p而不是在Linux中给出o/p?

C 数学计算未按预期工作

c - LeetCode : Two Sums (Error: Returning the Array)

java - ScreenCap 直接 toByteArray ,跳过保存到内存

c - 如何在 C 中减少 FILE* 指针

c - 从套接字中读取一行

c# - 将数组传递给 C# .Net 中特定索引的函数

java - 为什么indexOf()不能识别空格?