gpt4 book ai didi

c - 我的 strcat 代码中的 printf 有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 05:16:57 25 4
gpt4 key购买 nike

我已经制作了这个程序来模拟 strcat 的功能,但是 printf 有一个我不明白的错误...

代码如下:

#include <stdio.h>

char *mystrcat(char *s1, char *s2);

int main(void)
{
char *s1,*s2;
s1="asdad";
s2="asdad";
s1=mystrcat(s1,s2);
printf(s1);

return 0;
}
char *mystrcat(char *s1,char *s2)
{
int i,j;
for(i=0;s1[i]<'\0';i++) ;
for(j=0;s2[j]!='\0';j++) s1[i+j]=s2[j];
s1[i+j]='\0';
return s1;
}

最佳答案

第一个问题是s1没有足够的空间追加 s2给它。您需要 s1 指向的缓冲区的大小。至少是 strlen(s1) + strlen(s2) + 1 (+ 1 是 NUL 终止符)。

第二个问题是字符串文字是只读的。您分配 s1来自 "asdad" ,它创建一个指向(可能)只读内存的指针。当然,第一个问题意味着即使它是可写的,您也没有足够的空间追加到末尾,但这是 C 语言中常见的陷阱之一,值得一提。

第三个问题(已经在another answer中提到)是比较s1[i] < '\0'是错误的,您将无法正确找到 s1 的长度因为循环甚至不会运行一次迭代。正确的条件与第二个循环相同,!= '\0' . (这掩盖了问题 1,从那以后你无意中从头开始覆盖了 s1。)

关于c - 我的 strcat 代码中的 printf 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com