关于C语言字符数组的赋值最后自动添加‘\0’问题

如题 如定义char c[5]={"hello"};系统在赋值时会自动在最后面添加'\0'

但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了

#include<stdio.h>
void main()
{
char c[6]={"hello"};
printf("%s\n",c);

c[0]='A'; // 仅对第一位元素赋值,它并不影响其后面的字符
    printf("%s\n",c);
c[1]='B';  // 同理
    printf("%s\n",c);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-26
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。
所谓自动加'\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。
如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的工作,这时你再将第1位初始化时,后面的0仍存在就好象字符串结尾已经存在了。如果非debug运行则没有这个初始化工作。
如果你用字符方式初始化应当写:char c[6]={ 'h','e','l','l','o','\0' };本回答被提问者和网友采纳
第2个回答  2013-09-28

     char c[5] = {"hello"}; 有两个问题

(1)语法不对,应该是 char c[5]="hello"

(2)有错误, char c[5]="hello",字符串终止符溢出了


2.  但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
// 没错,但注意是数组第1到第4项自动赋值为0

但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了

// 需要看你赋什么值,如果是非零值、并且你把数组a当字符串使用,则结果无法预料(无法确定终止符);如果你把数组a只是当数组使用,则不会有读取问题

第3个回答  2013-09-28
可以正常读出来的,\0只是一个相当于标识符的东西,用来判断已经到达字符串的末尾
第4个回答  2013-09-29
可以正常读出 就是只能读出 第一位