一个C语言问题:字符串连接,不用strcat函数,我编出来的程序,编译通过了,执行时有问题,请教!

来源:百度知道 编辑:UC知道 时间:2024/05/25 13:04:29
#include<stdio.h>
char*add_str(char str1[],char str2[])
{
int i=0,j=0;
while(str1[i]!='\0') i++;
while(str2[j]!='\0')
{str1[j+i]=str2[j];
j++;
}
str1[j+i]='\0';
return str1;
}
void main()
{
char s1[]="1234567";
char s2[]="qwertyu";
char*strm;
strm=add_str(s1,s2);
printf("%s\n",strm);
}
执行的时候总是弹出对话框:“程序遇到问题需要关闭”,谁能帮我找出问题吗?

修改下函数体里面的代码
数组定义长度后不能在改变大小,用strcat也是新定义了一个足够大的数组,连接起来后又把数组名该了过来,
int i=0,j=0;
char strm[50];

// while(str1[i]!='\0')strm[i]=str1[i];
for(i=0;i<str1.length;i++){
strm[i]=str1[i];
}

//while(str2[j]!='\0')
for(j=0;j<str2.length;j++)
{strm[j+i]=str2[j];

}
strm[j+i]='\0';
return strm;

add_str函数没有问题,是调用时候,s1只有8个字节空间,把s2往s1里装,s1空间不够溢出了,程序当然崩溃了。把s1空间定义大殿就可以了比如char s1[15]="1234567";

char s1[], 内存空间太小,不能把s2中的内容复制到s1中。修改如下:

char*add_str(char str1[],char str2[])
{
int i=0,j=0;
while(str1[i]!='\0') i++;
while(str2[j]!='\0')
{str1[j+i]=str2[j];
j++;
}
str1[j+i]='\0';
return str1;
}
void main()
{
char s1[100]="1234567"; //此处申请足够大的内存空间即可
char s2[]="qwertyu";
char*strm;
strm=add_str(s1,s2);