簡體   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