关于C语言字符数组的赋值最后自动添加‘\0’问题
如题如定义charc[5]={"hello"};系统在赋值时会自动在最后面添加'\0'但是我如果定义chara[5];给前一位赋初值,则第二到第五位会自动赋值'\0'但后...
如题 如定义char c[5]={"hello"};系统在赋值时会自动在最后面添加'\0'
但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了 展开
但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了 展开
展开全部
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。
所谓自动加'\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。
如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的工作,这时你再将第1位初始化时,后面的0仍存在就好象字符串结尾已经存在了。如果非debug运行则没有这个初始化工作。
如果你用字符方式初始化应当写:char c[6]={ 'h','e','l','l','o','\0' };
所谓自动加'\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。
如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的工作,这时你再将第1位初始化时,后面的0仍存在就好象字符串结尾已经存在了。如果非debug运行则没有这个初始化工作。
如果你用字符方式初始化应当写:char c[6]={ 'h','e','l','l','o','\0' };
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char c[5] = {"hello"}; 有两个问题
(1)语法不对,应该是 char c[5]="hello"
(2)有错误, char c[5]="hello",字符串终止符溢出了
2. 但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
// 没错,但注意是数组第1到第4项自动赋值为0
但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了
// 需要看你赋什么值,如果是非零值、并且你把数组a当字符串使用,则结果无法预料(无法确定终止符);如果你把数组a只是当数组使用,则不会有读取问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以正常读出来的,\0只是一个相当于标识符的东西,用来判断已经到达字符串的末尾
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以正常读出 就是只能读出 第一位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询