C中的strcmp返回1而不是0

shi*_*i93 1 c string comparison string-comparison strcmp

我在C中编写了以下代码.

#include <stdio.h>
#include <string.h>
int main(void) {
    char str1[4] = "abcd";
    char str2[4] = "abcd";
    printf("%d\n",strcmp(str1,str2));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期望返回值为0(因为我被教导strcmp函数为相等的字符串返回0).但它打印1!

Success  time: 0 memory: 2248 signal:0
1
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?还是我错过了什么?

Jab*_*cky 9

因为你的阵列不够长.您没有考虑字符串的零终结符.你的字符串需要5个字符,字符串本身需要4个字符,零终止符需要1个字符.

写:

char str1[5] = "abcd";
char str2[5] = "abcd";
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我想知道你的编译器为什么不发出警告或者它发出警告?

  • 或者你可以写`char str1 [] ="abcd";`并让编译器计算长度(5). (2认同)
  • @ButaniVijay:在C中没有"out of bound"异常.如果你写的比最后一个索引更远,那么数组之后的内存将被覆盖,然后就会发生任何事情. (2认同)