永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-01-03 07:39
  • 提问者网友:骨子里的高雅
  • 2021-01-02 20:05
代码:

#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!”就会正常拼接,者是什么原因啊
最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-01-02 20:57
void StrCat(char *p ,char *q)函数最后需要给p添加字符串结束符'\0',否则就很大概率会出现乱码。
另外,你的char a[] = "hello" ;定义的时候要弄得大一点,否则把b的字符连接到a的后面会发生数组越界访问,这是非法的做法。可以写成:char a[20] = "hello" ; 这样a的大小就够容纳 "helloboy!", "helloworld! "之类 比 "hello" 长的字符串了。
全部回答
  • 1楼网友:有你哪都是故乡
  • 2021-01-02 23:52
在StrCat(a, b) 函数结尾添加一行 *p = '\0';
  • 2楼网友:西岸风
  • 2021-01-02 22:57
这是由于你的a数组的长度不够引起的,你定义a的时候没有指定长度,所以他的长度正好为能容纳下"hello"的大小,你指定一下就好了 比如char a[100] = "hello";另外,在strcat函数的第二个循环之后,加上对这整个字符串的结束,*p='\0';,这样应该就不会出现那个问题了
  • 3楼网友:笑迎怀羞
  • 2021-01-02 21:46

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

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯