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

时间:2016-12-13 21:09:26

标签: c printf strcat

我已经让这个程序模拟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;
}

2 个答案:

答案 0 :(得分:4)

至少,obj = JSON.parse(crash); console.log(obj.data2[0].version); s1[i] < '\0'相同,始终为假。

答案 1 :(得分:4)

第一个问题是inv[count] = malloc(sizeof(struct Inventory)); 没有足够的空间向其附加s1。您需要s2指向的缓冲区大小至少为s1strlen(s1) + strlen(s2) + 1是NUL终止符。)

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

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