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

相似问题

3
linux C语言strcmp报错。
1
C语言关于搜索函数的求助
3
c语言:输入3个字符串,按由小到大的顺序输出,为什么输出有问题
1
C语言:替换文件中的字符串
0
运行结果是ld returned 1 exit status.应该是我的函数有问题,如何改正?
2
c语言 大量数据在写入文件时会崩溃 急求问题所在和解决办法
2
Linux下gcc编译C代码出现段错误,提示没有strcmp.S文件,原因何在?
3
c语言 给国家的名称按字典顺序排序
2
急求!!!请问我错在哪里?以及怎么改?谢谢!!!c语言 给国家的名称按字典顺序排序
2
一道简单的c语言 有一个测试点始终通不过。。求救
4
C语言实现字符串密码对比问题,恳请大佬帮忙
0
C语言 关于读文件及如何实现输入文件中已存在的信息则不允许被添加
1
C语言,我明明把单链表的某个节点删除了,但单链表写入文件时还是会写入一些奇怪的东西?
1
一个c语言改错题,求大神解答
1
这是职工管理系统的源代码,问题主要是无法以正确格式输出文件内容和修改函数不起作用,希望得到指导。
0
大一c语言企业员工管理系统(救救孩子吧)
3
C语言用其中一个结构的体元素从文件中查找到相同的结构体之后如何从文件中输出查找到的那个结构体
1
来大神帮忙啊!!vs2010C语言问题解决不了
2
C语言学生成绩管理系统如何增加一个功能可以把学生信息保存到TXT文件内。
1
求解不用VC运行程序后出现断言失败的问题