我已经让这个程序模拟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;
}
答案 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
指向的缓冲区大小至少为s1
(strlen(s1) + strlen(s2) + 1
是NUL终止符。)
第二个问题是字符串文字是只读的。您从+ 1
分配s1
,它创建一个指向(可能)只读内存的指针。当然,第一个问题意味着即使它是可写的,你也没有足够的空间追加到最后,但这是C中常见的陷阱之一,值得一提。
第三个问题(在another answer中已经提到)是比较"asdad"
是错误的,你将无法正确找到s1[i] < '\0'
的长度,因为即使是一次迭代,循环也不会运行。正确的条件与第二个循环s1
中的相同。 (这掩盖了问题1,从那时起你无意中从一开始就覆盖了!= '\0'
。)