关于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
可以正常读出 就是只能读出 第一位

关于C语言字符数组的赋值最后自动添加‘\\0’问题
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。所谓自动加'\\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的...

c语言中字符数组中最后为什么必须为\\0?
c语言中字符数组并没有规定最后一个字符为'\\0',甚至可以不包含'\\0',添加'\\0'作为结束标志是针对于c语言对字符串的处理而言的,因此,字符数组中最后一个字必须为‘\\0’是错误的。C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字...

c语言中为什么字符数组要加\\0?
原因,没有定义字符数组长度给它进行每个元素赋值,要手动加上终止符'\\0'用字符串时则不需要,c系统会自动在末尾加'\\0'解决后:

c语言中字符串,为什么最后要加个‘\\0' ?
\\0'在c语言中代表着字符串的结束 在你不输入'\\0'的时候 字符串不知道已经读完了 还有继续向后读 读一个字节长度是?两个字节长度 就是烫 这是ascii值决定的 汉子是两个字节就不多说了 '\\0'的ascii值为(0x)00有时候如果未定义可能会出现一堆烫知道出现默认的00(也就是'\\0')才会...

C语言 字符串 编程 输入字符结束时赋值'\\0'
这是因为字符串是以‘\\0'做为结束标志的。在内存中,比如字符串,“abc",实际上是四个字节的空间abc'\\0'。在你的程序中:while((s[i]=getchar())!='\\n')i++;s[i]='\\0';前面的while只是得到了字符串的字符,而没有结束标志。如果没有最后一句s[i]='\\0';你的字符就不能正确结束...

C语言在数组后面添加结束符'\\0'的小问题~
a[4]={1,2,3,4}char a[4],也可存放4个字符,但最后一个字符得为\\0,不然不能正常输入字符串.char a[4]={'a','b','c','\\0'},当然'\\0'也可以省略,char a[4]={'a','b','c'}但不能是char a[4]={'a','b','c','d'},输出的时候会有乱码,因为没有结束标志....

C语言中关于字符串结束'\\0'的问题.
to[i]='\\0';字符串结束符,如果没有这个的话,将会输出你的数组前面正确的部分,后的是乱码,因为编译器无法知道你的数组是在何时结束输出,只会按照你的数据大小,从0-n-1输出各个字符。所以,加上这个之后就能够正确输出来。

关于字符数组中的结束标识符‘\\0’,是怎么加啊的
直接在字符数组最后一个字符后面加上'\\0'。例如:char a[10],需要存放“hello”字符串:a[0]-a[4]分别存放h,e,l,l,o;a[5]存放'\\0';在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把...

你好,我写的C语言程序字符串数组后面总是显示0,怎样把这个0去掉,让0...
\\0(ascii 0) 字符串结束标志,只要字符串数组大小够大,编译器会自动加上。如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\\0'。如:u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};一般来说只是在内存中存在,输出时不会显示,没见到...

c语言字符串结束时什么时候用'\\0’,什么时候用"\\0",什么时候用0?
应该是'\\0' ,"\\0"是字符串,理解时可以这样理解,反正“\\0”是的字符串,把“\\0”当做“a”这个字符串,系统在把字符串的值给数组时,实际上自动在字符串最后面加了“\\0”,来判断字符串是否结束,比如说b[ ] = "a",则数组b中有两个元素,即b[ ] = { " a\\0 " } 本题中p[ ...

相似回答