关于字符数组相关问题
#include<stdio.h>
int main()
{
char a[27]={"qwertyuiopasdfghjklzxcvbnm"};
char b[27];
int i;
for(i=0;i<26;i++)
{
b[i]=a[i];
}
puts(b); //输出两遍a[27],中间有乱码
//如果用for语句逐个输出的话就不会又任何问题
return 0;
}
额,有时会犯这样的错误。 自己摸索一下也能解决,但是我就想知道为什么?? 一个字符数组赋值给另一个字符数组,然后用%s输出,或者puts()输出的时候,总会出现问题。求解 ,谢谢。
PS:还有一个问题,比如说上面26个字母,我声明一个数组,为什么大小要27,不是26? ‘\0’不是系统自动加上去的吗?
[解决办法]
1. puts()输出的出问题,是因为b最后没有'\0', 如果你改成i<=26就没问题了。
2. 不是系统加的'\0'
[解决办法]
新的字符数组,没有以\0结束。
[解决办法]
主要是字符出组没有以'\0'结束。这个是根本原因。
[解决办法]
你这个是数组,编译器不会给你自动在后面加上"\0",但是你输出的时候是以字符串的形式输出的,遇到"\0"才结束,所以会出错,你这里可以手动在数组末尾加上"\0".
[解决办法]
PS:还有一个问题,比如说上面26个字母,我声明一个数组,为什么大小要27,不是26? ‘\0’不是系统自动加上去的吗?
-----------------------------------------
因为char a[27]={"qwertyuiopasdfghjklzxcvbnm"};
有了双引号,是字符串,所以是27
\0是系统加上的。
但是你下面的i<26,实际上只到了25。
应当是i<27才可以。