c - strcmp 不会在 'identical' 字符串上返回 0

标签 c strcmp

char c;
char unprocessed_instruction[9];
int i;

for (i=0; i<num_tasks; i++){
    c = fgetc(fp);
    int j = 0;
    while (c != ' '){
        unprocessed_instruction[j]  = c;
        j = j + 1;
        c = fgetc(fp);
    }
    char instruction[j];
    for (int i=0; i<j; i++){
        instruction[i] = unprocessed_instruction[i];
    }
    for (int i=0; i<j; i++){
        printf("%c\n", instruction[i]);
    }
    int i = strcmp(instruction, "initiate");
    printf("%i\n", i);
}

因此,代码将文本文件中的初始字符存储在有界数组中(9 是任何输入的最大大小),然后移动到实际输入大小的数组(如果它恰好更小) 。例如,如果输入是“initiate”,则 char instructions[] 被初始化为大小 8。这工作正常,因为我通过打印数组的元素来测试它,但数组和“initiate”之间的 strcmp 却不起作用返回 0。这是为什么?

最佳答案

input is "initiate", for example, then char instruction[] is initialized to size 8

您无法将其传递给 strcmp,因为 strcmp 需要以 null 结尾的字符串。由于字符串“initiate”中有 8 个字符,因此存储它的数组的大小必须至少为 9,以便为空终止符留出空间 - 它应该位于最后一个字符之后。

关于c - strcmp 不会在 'identical' 字符串上返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814847/

相关文章:

c - scanf 使程序崩溃并比较字符串 C

C 程序卡在 strcmp 附近

c - 读取c中的输入后如何清除缓冲区?

c - 尝试删除空格并替换为破折号 - C

c - 如何在 C 中使用 GMP 库分配浮点值?

c - 调试出现运行时错误的字符串比较部分

c - 对于矩阵来说,这是正确的类型和逻辑吗?

c - 当我的 --help 信息是我的 argv[1] 时,有什么原因不会打印?任何建议表示赞赏

c++ - gcc/clang 是否有可能在剥离所有调试信息的同时链接到可执行文件?

c - 解码文件