永发信息网

C语言实现strcat函数,为什么会有这样的输出?

答案:4  悬赏:20  手机版
解决时间 2021-01-03 07:39
代码:

#import

void StrCat(char *p ,char *q)

{

while (*p != '\0')

{

p++ ;

}

while (*q != '\0')

{

*p = *q ;

++q ;

++p ;

}

}

int main(int argc, const char * argv[])

{

char a[] = "hello" ;

char b[] = "boy!" ;

StrCat(a, b) ;

printf("%s",a) ;

}
输出结果
helloboy!_\377
b数组的长度小于5个就会出现后面的数字,如果是“world!”就会正常拼接,者是什么原因啊
最佳答案
void StrCat(char *p ,char *q)函数最后需要给p添加字符串结束符'\0',否则就很大概率会出现乱码。
另外,你的char a[] = "hello" ;定义的时候要弄得大一点,否则把b的字符连接到a的后面会发生数组越界访问,这是非法的做法。可以写成:char a[20] = "hello" ; 这样a的大小就够容纳 "helloboy!", "helloworld! "之类 比 "hello" 长的字符串了。
全部回答
在StrCat(a, b) 函数结尾添加一行 *p = '\0';
这是由于你的a数组的长度不够引起的,你定义a的时候没有指定长度,所以他的长度正好为能容纳下"hello"的大小,你指定一下就好了 比如char a[100] = "hello";另外,在strcat函数的第二个循环之后,加上对这整个字符串的结束,*p='\0';,这样应该就不会出现那个问题了

因为tmp是局部变量,离开mystrcat函数后就被清除了

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
最新关于皇上和皇后的小说(两个人经历种种挫
下列环境污染事件的主要原因与煤燃烧排放二氧
求教苹果A1237能不能装苹果10.9版本
鸣人与八尾是多少集
两个数相乘,一个因数乘100,另一个因数除以1
指导的近义词是什么呢
对于函数y=-3x+5,y随x的增大而________.
房地产开业庆典,嘉宾和客户分别要送什么礼品
研发的意思
支付宝的好友添加在哪里?
一个超市一年能赚多少
白天总是犯困怎么办?
光驱干什么用,非常重要吗?
怎样把多个文件压缩
为什么我的移动号码改了归属地原来的话费就没
推荐资讯
右图是从元素周期表中截取的原子序数1-18的四
粮食生产地区不平衡和国家间分配不均,是产生
我是工伤骑跨伤尿道断裂会师现在是定期扩张,
Shewastoldtotake________medicinet
高明的近义词是什么利索的近义词是什么简练的
单选题下列自然资源中,属于可再生资源的是A.
没有驾驶证,行车证,扣车收据掉了,只右身份
Not until I came home last night to bed.A.
眉毛增长液哪个牌子好
微信账号在哪个文件夹
怀化市城市管理行政执法局处罚中心在什么地方
U盾为什么显示不出口令
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?