繁体   English   中英

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

[英]What's wrong with printf in my strcat code?

我已经制作了该程序来模拟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[i] < '\\0's1[i] < 0 ,始终为假。

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

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

第三个问题(已经在另一个答案中提到)是比较s1[i] < '\\0'是错误的,您将无法正确找到s1的长度,因为循环甚至不会执行一次迭代。 正确的条件与第二个循环!= '\\0' (这掩盖了问题1,因为从那时起您无意间覆盖了s1 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM