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

如题如定义charc[5]={"hello"};系统在赋值时会自动在最后面添加'\0'但是我如果定义chara[5];给前一位赋初值,则第二到第五位会自动赋值'\0'但后... 如题 如定义char c[5]={"hello"};系统在赋值时会自动在最后面添加'\0'

但是我如果定义char a[5];给前一位赋初值,则第二到第五位会自动赋值'\0'
但后面我又给第三位到第五位赋值了,这个数组是不是就不能正常读出了
展开
 我来答
仙戈雅3n
2013-09-29 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:896万
展开全部
#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);
}

cdyzxy
推荐于2017-11-26 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3731万
展开全部
c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。
所谓自动加'\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。
如果你用debug方式运行程序,调试环境自动会把你开设的char a[5];进行初始化0的工作,这时你再将第1位初始化时,后面的0仍存在就好象字符串结尾已经存在了。如果非debug运行则没有这个初始化工作。
如果你用字符方式初始化应当写:char c[6]={ 'h','e','l','l','o','\0' };
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljf10000
2013-09-28 · TA获得超过199个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:111万
展开全部
  1.  char c[5] = {"hello"}; 有两个问题

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

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


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

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w天使de翅膀w
2013-09-28 · TA获得超过247个赞
知道小有建树答主
回答量:169
采纳率:100%
帮助的人:101万
展开全部
可以正常读出来的,\0只是一个相当于标识符的东西,用来判断已经到达字符串的末尾
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿炳仰
2013-09-29
知道答主
回答量:5
采纳率:0%
帮助的人:2.7万
展开全部
可以正常读出 就是只能读出 第一位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式