一段c code的变量赋值

chara[6]="0101";printf("a=[%s]\n",a);strncpy(a,"CA101"+2,3);printf("a=[%s]\n",a);这里打印... char a[6] = "0101";
printf("a=[%s]\n", a);
strncpy(a, "CA101"+2, 3);
printf("a=[%s]\n", a);

这里打印出的是:
a=[0101]
a=[1011]

我理解strncpy不是从第一个参数,即这里的a的起始地址开始覆盖么?那救国应该是101,为什么是1011呢?难道是从0101后开始赋值101?那这样也应该是01011?谢谢指点!
展开
 我来答
chengyuan2010
2010-03-15
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
strncpy(a, "CA101"+2, 3);是从CA101的第2位开始拷贝,拷贝3位既是101,就是将101这三位考到a中,从起始地址开始,就是要覆盖a中的前3位!
结果a的值就是1011
个人调试过程序!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhanber
2010-03-04 · TA获得超过297个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:93.7万
展开全部
我来回答:
strncpy之前的a 在内存中: '0' '1' '0' '1' '\0'
strncpy时复制的字符及位置: '1' '0' '1' 没有被覆盖的数据保留
看到没?“救国是”: a-> '1' '0' '1' '1' '\0'
有:a = "1011"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kwydwuf
2010-03-04 · TA获得超过7409个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:1987万
展开全部
调用下面语句前,a[3] = '1', a[4] = '\0',
strncpy(a, "CA101"+2, 3);

strncpy 不会自动加上 '\0',所以你看到多了一个1。 解决方法是在strncpy之前:
memset(a, 0, sizeof(a));
或者在strncpy之后
a[3]='\0';
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
顺义火乐
2010-03-04 · TA获得超过228个赞
知道答主
回答量:154
采纳率:0%
帮助的人:35.2万
展开全部
就是a=[1011],你只考了3个过去啊。CA101+2是101再加上原来数组的最后一个1啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式