一段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?谢谢指点! 展开
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?谢谢指点! 展开
展开全部
strncpy(a, "CA101"+2, 3);是从CA101的第2位开始拷贝,拷贝3位既是101,就是将101这三位考到a中,从起始地址开始,就是要覆盖a中的前3位!
结果a的值就是1011
个人调试过程序!
结果a的值就是1011
个人调试过程序!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来回答:
strncpy之前的a 在内存中: '0' '1' '0' '1' '\0'
strncpy时复制的字符及位置: '1' '0' '1' 没有被覆盖的数据保留
看到没?“救国是”: a-> '1' '0' '1' '1' '\0'
有:a = "1011"
strncpy之前的a 在内存中: '0' '1' '0' '1' '\0'
strncpy时复制的字符及位置: '1' '0' '1' 没有被覆盖的数据保留
看到没?“救国是”: a-> '1' '0' '1' '1' '\0'
有:a = "1011"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用下面语句前,a[3] = '1', a[4] = '\0',
strncpy(a, "CA101"+2, 3);
strncpy 不会自动加上 '\0',所以你看到多了一个1。 解决方法是在strncpy之前:
memset(a, 0, sizeof(a));
或者在strncpy之后
a[3]='\0';
strncpy(a, "CA101"+2, 3);
strncpy 不会自动加上 '\0',所以你看到多了一个1。 解决方法是在strncpy之前:
memset(a, 0, sizeof(a));
或者在strncpy之后
a[3]='\0';
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是a=[1011],你只考了3个过去啊。CA101+2是101再加上原来数组的最后一个1啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询