[英]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.