C语言中字符数组的问题

coldnumber 2013-05-25 10:34:53
#include<stdio.h>
void main()
{
char c[5]={'c','h','i','n','a'};
char b[6]={'c','h','i','n','a'};
puts(c);
puts(b);


}




定义的字符数组大于实际字符长度时,系统自动在末尾加上'\0',故puts(b)为china;
但为什么定义字符数组等于实际字符长度时,会在末尾多出一些乱码呢,数组c的长度不是5吗?
...全文
89 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
无_名_ 2013-05-25
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
char c[5]={'c','h','i','n','a'};
char b[6]={'c','h','i','n','a'};
puts(c);
//*************************
for(int i = 0; i < 5; i++){ //同样是字符数组c,这样可以正常输出
printf("%c",c[i]);
}
printf("\n");
//**************************
//*************************
for(i = 0; i < 12; i++){ //正常应该是<5
printf("%c",c[i]);
}
printf("\n");
//**************************
puts(b);
}

无_名_ 2013-05-25
  • 打赏
  • 举报
回复
如果将上述程序中循环设置为 for(int i = 0; i < 12; i++) //正常应该是<5 也同样会出现相同的乱码。 因为输出了正常的字符数组c中之后的内容。 把内存中不可知的内容输出了。 这样讲应该可以理解了吧?
无_名_ 2013-05-25
  • 打赏
  • 举报
回复

#include<stdio.h>
void main()
{
char c[5]={'c','h','i','n','a'};
char b[6]={'c','h','i','n','a'};
puts(c);
//*************************
for(int i = 0; i < 5; i++){ //同样是字符数组c,这样可以正常输出
printf("%c",c[i]);
}
printf("\n");
//**************************
puts(b);
}
worldy 2013-05-25
  • 打赏
  • 举报
回复
#include<stdio.h> void main() { char* c="China"; //指针会自动加0结束符 char c[5]={'c','h','i','n','a'};//编译器不会加0,因为你规定的空间已经全部被占 char b[6]={'c','h','i','n','a'};//应该会加0 puts(c); puts(b); }
worldy 2013-05-25
  • 打赏
  • 举报
回复
结束字符\0必须考虑在内计数长度,并且你要赋值\0
无_名_ 2013-05-25
  • 打赏
  • 举报
回复
与puts函数有关
无_名_ 2013-05-25
  • 打赏
  • 举报
回复
那种写法是不会自动加 '\0' ,所以,程序会自动往下输出,将内存中多余的内容输出来,就是乱码的形式。
mujiok2003 2013-05-25
  • 打赏
  • 举报
回复

char array[] = "China"; 
mujiok2003 2013-05-25
  • 打赏
  • 举报
回复
puts期待字符串(必须以'\0'结尾)
fox_carnival 2013-05-25
  • 打赏
  • 举报
回复
puts(arr)是对数组arr的字符输出,直到'\0'才停止输出。你这个题目,最好对数组中需要的元素手动赋值'\0'。
www_adintr_com 2013-05-25
  • 打赏
  • 举报
回复
这种写法是不会自动加 '\0' 的, 你是碰巧遇到一个 '\0' 了
hugett 2013-05-25
  • 打赏
  • 举报
回复
字符数组无论多大。。都不会在后边加'\0'的。。只是你这里恰巧后边是一个'\0'而已。。第一句后边有乱码是因为puts是不管你数组大小的。。会一直输出一直到找到一个'\0'位置。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧