关于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?
原因,没有定义字符数组长度给它进行每个元素赋值,要手动加上终止符'\\0'用字符串时则不需要,c系统会自动在末尾加'\\0'解决后:

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

关于C语言字符数组的赋值最后自动添加‘\\0’问题
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。所谓自动加'\\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化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' 是什么意思
!的意思是非,亦可以理解成不。‘\\0’是字符串的结束符号,由编译器自动加上。比如说,把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\\0' 这后面的'\\0'是由C编译系统自动加上的。所以在用字符...

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

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

c语言,字符数组中最后一个字必须为‘\\0’,为什么错?
\\0',如果字符数组中存放的是一个 字符串 ,则最后一个字符应当'\\0','\\0'是结束符号,这样当输出这个字符串时,只须输入 数组 名就可以,输出 函数 会自动输出数组中的字符,直到遇到'\\0'为止,否则你就要利用循环自己将字符一个一个的输出,而且还要判断该字符是不是所需要的字符,明白了么?

相似回答