请问大神定义char s[5]={'1','2','3','4','5'};和char s[5]={“12345”};有错吗?为什么?谢谢!

请问大神定义char s[5]={'1','2','3','4','5'};和char s[5]={“12345”};有错吗?为什么?谢谢!

char s[5]={'1','2','3','4','5'};是可以的,但
char s[5]={“12345”};则错了。因为存储字符串"12345"需要6个字节。(外加一个串结束符'\0')
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-06
第一个定义了5个字符,定义本身没有错。第二定义了一个字符串,长度越界。因为字符串必须包括一个\0的结束符,所以会占6个字节,用你的方法就越界了。

不过用第一种定义方法,你要用数组的方法去操作,不能用字符串的方法处理(因为它不是字符串,少结束符),估计你说的乱码可能是这个问题。如果你的答案说是2个都有错,那就要看一下后面是怎么用的。
第2个回答  2013-09-06
第一个是定义了5个变量,1,2,3,4,5,而第二个定义是定义了一个变量12345,两者定义不一样追问

有错吗?不是要你解释区别

追答

第一个没有,第二个不能用双引号的

追问

答案是都有错的,而且第二个错不在双引号,是长度的问题

追答

是的,第一个什么错?

追问

可是第一个编译运行时后面会乱码的,而且书上说第一个也是长度不对,要定义成char s[6]={'1','2','3','4','5'};才对,是这样的吗?

第3个回答  2013-09-06
第一个没错,第2个字符串后面会带结束符'\0',会有6个元素,会越界。第2中大括号写不写是一样的追问

可是第一个编译运行时后面会乱码的,而且书上说第一个也是长度不对,要定义成char s[6]={'1','2','3','4','5'};才对,是这样的吗?

相似回答