重现 strcpy 的行为
Reproduce the behaviour of strcpy
我试图在 c 中重现 strcpy
的行为,我的问题是该函数有效但它在末尾附加了额外的东西。
char *ft_strcpy(char * dst, const char * src)
{
int i;
i = 0;
while (src[i] != '[=10=]') {
dst[i] = src[i];
i++;
}
return dst;
}
当我 运行 它时,我得到以下信息。
int main()
{
char p[] = {};
char z[] = "Hello World";
ft_strcpy(p,z);
printf("%s\n", p);
return 0;
}
您没有复制 nul 终止符,因此 printf
不知道要停止。
在循环后面加上dst[i] = 0;
就可以了。
此外,您还没有为 p
分配任何 space,因此您将获得未定义的行为。对于第一个测试,只需执行类似 char p[100];
的操作,并确保 z
的长度永远不会超过 99 个字符。最终你需要一个更好的修复,但这会让你开始。
天天,
循环结束后设置dest[i]为'\0'。这是代码:
int main()
{
char src[100], dest[100], i;
printf("Enter string Src: ");
scanf("%s",src);
for(i=0; src[i]!='[=10=]'; ++i)
{
dest[i]=src[i];
}
dest[i]='[=10=]';
printf("String Dest: %s",dest);
return 0;
}
我试图在 c 中重现 strcpy
的行为,我的问题是该函数有效但它在末尾附加了额外的东西。
char *ft_strcpy(char * dst, const char * src)
{
int i;
i = 0;
while (src[i] != '[=10=]') {
dst[i] = src[i];
i++;
}
return dst;
}
当我 运行 它时,我得到以下信息。
int main()
{
char p[] = {};
char z[] = "Hello World";
ft_strcpy(p,z);
printf("%s\n", p);
return 0;
}
您没有复制 nul 终止符,因此 printf
不知道要停止。
在循环后面加上dst[i] = 0;
就可以了。
此外,您还没有为 p
分配任何 space,因此您将获得未定义的行为。对于第一个测试,只需执行类似 char p[100];
的操作,并确保 z
的长度永远不会超过 99 个字符。最终你需要一个更好的修复,但这会让你开始。
天天,
循环结束后设置dest[i]为'\0'。这是代码:
int main()
{
char src[100], dest[100], i;
printf("Enter string Src: ");
scanf("%s",src);
for(i=0; src[i]!='[=10=]'; ++i)
{
dest[i]=src[i];
}
dest[i]='[=10=]';
printf("String Dest: %s",dest);
return 0;
}