main()
{
int n=2;
char a[]="abcdef";
char b[]="123";
char c[10];
int i,k,m;
k=2;
for(m=0;*(a+m)!='\0';m++)
{
*(c+m)=*(a+m);
}
*(c+m)='\0';
for(i=0;*(b+i)!='\0';i++)
{
*(a+n)=*(b+i);
n++;
}
for(k=2;*(c+k)!='\0';k++)
{
*(a+n)=*(c+k);
n++;
}
*(a+n)='\0';
printf("%s",a);
希望输出ab123cdef,实际输出ab123cdeg 请问问题在哪儿
c,字符串中插入字符串
答案:2 悬赏:0
解决时间 2021-02-19 23:22
- 提问者网友:猖狂醉薇
- 2021-02-19 05:34
最佳答案
- 二级知识专家网友:冷态度
- 2021-02-19 06:55
问题出在数组a的长度默认是7(6个字符加个'\0'),而后面插入元素时,下标必定越界。
改的话就在定义数组a时,设置长一点。
至于'f'为什么变成'g',应该是变量n的地址与a[8]的地址一样。当最后一次循环(n=8时),*(a+n)=*(c+k)='f',但后面还有句n++,也就是a[8]++,所以'f'变成了'g'。如果在循环外面再来句n++,那就是'h'了。
改的话就在定义数组a时,设置长一点。
至于'f'为什么变成'g',应该是变量n的地址与a[8]的地址一样。当最后一次循环(n=8时),*(a+n)=*(c+k)='f',但后面还有句n++,也就是a[8]++,所以'f'变成了'g'。如果在循环外面再来句n++,那就是'h'了。
全部回答
- 1楼网友:浪者不回头
- 2021-02-19 07:56
#include
#include//方便在控制台打印中英文混合字符
int main()
{
char s[]="1234.5678";
int i=0;
char*p=s;
for(i=11;i>=4;i--)//第二个数字2后的字符整体后移2位以便最后放入°
{
s[i]=s[i-2];
}
s[11]='\'';//最后放入'
s[12]='\0';
printf("%d\n",sizeof(s));
printf("%s\n",s);
p++;
p++;//移到第二个数字2的后面以便放入°
strncpy(p,"°",2);
setlocale(lc_all,"chs");
printf("%s\n",s);
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯