C语言的题目!急!谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/25 20:23:09
已有定义 char a[]="xyz",b[]={'x','y','z'};
则数组a和b的长度相同

对两个数组a和b进行下列初始化:
char m[]="1234567";
char n[]={'1','2','3','4','5','6','7'}
则数组m比数组n长1

这两题问的有什么区别啊?为什么答案不一样啊?

急啊 谢谢

第一个题目答案错了,长度不一样。我的QQ:874729202

其实两个情况都是前一个比后一个长1
原因:char a[]="xyz"形式的其实是字符串,而字符串默认是以'\0'结尾,所以多出了一个
你可以试试两个都写成 a[3],b[3]形式,a[3]形式是会报错数组溢出的,b[3]不会

char n[]={'1','2','3','4','5','6','7'}
是指1 ,2 ,3 ,4 ,5 ,6 ,7 ,有字符13个加\0
char m[]="1234567";
是指1234567 有字符7个加\0
你也可以运用到程序上测试一下就知道了

第一个错了!应该不一样长 ~字符串后面有个‘\0’

其实第一种情况和第二种情况的长度都不一样,首先你要明白计算长度的函数strlen的原理,这个函数是在遇到'\0'才停止计算长度的
char a[]="xyz";
这个字符串在内存的存储是这样的
|x|y|z|\0|
所以数组a的长度就是3
char b[]={'x','y','z'};
这时字符串并没有在z的后面添加上'\0'
在z的后面还会有很多字符,当你用strlen计算数组b的长度时只有遇到了'\0'才会停止
也就是说数组b的长度是不可预知的

第二种情况和第一种情况道理是一样的

"ABC"这种样子的其实后面真实的字符串是这样的"ABC\0"