#pragma warning (disable:4996);
void my_strcat(char*p, char*q)
{
int n = strlen(p);
printf("n=%d\n", n);
int j = strlen(q);
printf("j=%d\n", j);
int i = 0;
for (int i = 0; i <=j; i++)
{
*(p + i + n) = *(q + i);
}
*(p + i + n) = 0;
}
int main()
{
char str1[128] = "hello";
char str2[128] = "123456";
my_strcat(str1, str2);
printf("%s\n", str1);
system("pause");
return 0;
}
问题是在你得函数my_strcat里你定义了两个范围不同的变量i。在for循环前定义了int i = 0;然后这个变量i一直没有改变过。在for循环里定义了范更小的变量i,它从0 到6.但是循环结束它就消失了。到 *(p + i + n) = 0;时,用到的i时一直没有改变的i= 0。所以拷贝的123456在1处被写了'\0'终止字符串了。其实你不要 *(p + i + n) = 0;也没问题了,因为for循环到j把第二个串的结束符号=也拷贝了。
#pragma warning (disable:4996);
#include <stdio.h>
#include <string.h>
void my_strcat(char*p, char*q)
{
int n = strlen(p);
printf("n=%d\n", n);
int j = strlen(q);
printf("j=%d\n", j);
for (int i = 0; i <= j; i++)
{
*(p + i + n) = *(q + i);
}
*(p + j + n) = 0;
}
int main()
{
char str1[128] = "hello";
char str2[128] = "123456";
my_strcat(str1, str2);
printf("%s\n", str1);
system("pause");
return 0;
}
// Output
n=5
j=6
hello123456
输出的结果是?
在my_strcat函数中,
int i = 0; //这里是第一个i
for (int i = 0; i <=j; i++) //这里你重新声明了一个i(第二个i),而且i<=j 应该是i<j
{
*(p + i + n) = *(q + i);
}//for里的i的作用域在这里就结束了
*(p + i + n) = 0;//这里的i使用的是第一个i,它的值还是0
所以结果错误了。可以把for (int i = 0; i <=j; i++)改成for ( i = 0; i <j; i++)
如有帮助,请采纳一下,谢谢。