关于C语言strcmp函数的问题,求教?

一个关于C的问题
具体如下:
在学习strcmp函数的时候,试验了几遍,无法理解运行的结果。
例如:

#include<stdio.h>
#include<string.h>
int main(void)
{
    char A[8]="1234567"; 
    char B[8]={'1','2','3','4','5','6','7'};
    int C=strcmp(A,B);
    printf("%d",C);
    return 0;
}

运行的结果为0,在我看来是正常的,但是如果改变数组A和B,代码如下:

#include<stdio.h>
#include<string.h>
int main(void)
{
    char A[8]="12345678"; 
    char B[8]={'1','2','3','4','5','6','7','8'};
    int C=strcmp(A,B);
    printf("%d",C);
    return 0;
}

此时运行的结果为-1

请问为何会出现这样的结果,希望能详细解答,不胜感谢!

1个回答

字符串以'\0'结尾,所以实际可以存储的内容比长度-1
你A[8]不能存8个数字,否则字符串无法截断

qq_43616237
Chris Brown 回复贵阳挖掘机马善福,自备车辆专业挖游泳池: 好的,终于懂了,多谢!
9 个月之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复Chris Brown: 是strcmp里循环比较直到遇到\0,你没有\0就会比较到后面的内存,这些内存有什么内容就不好说了。
9 个月之前 回复
qq_43616237
Chris Brown 回复贵阳挖掘机马善福,自备车辆专业挖游泳池: 那请问无法截断A的话是不是意味着不知道A在何处结束,所以具体截断的位置就不会是8这个位置呢
9 个月之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复Chris Brown: C语言不会对下标越界做出检查,需要程序员自己当心
9 个月之前 回复
qq_43616237
Chris Brown 还是不太明白,A[8]以字符串形式存储的话后面的"\0"会不会占位呢,为什么编译器没有报错呢,本人新手求教
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问