簡體   English   中英

使用指針編寫strcat()時出錯

[英]Error while writing strcat() using pointers

我正在嘗試使用The C programming Language by K&R學習C。 我正在嘗試使用指針編寫strcat()程序。

char *strcat (char *s, char *t){
    char *d;
    d = s;
    while(*s++);
    s--;
    while(*s++ = *t++);
    return d;
}

int main () {
    char *name1;
    char *name2;
    name1 = "stack" ;
    name2 = "overflow";
    printf("%s %s\n", name1, name2);
    printf("strcat out : %s", strcat(name1, name2));
    return 0;
}

但是我得到的輸出是

stack overflow
Segmentation fault

為什么不起作用? 任何人都可以在這里澄清錯誤。

因為指針是指向文字的指針,並且不僅是只讀的指針,所以目標的大小不足以包含兩個字符串。 對於至少string1您可能希望使用大小至少足以容納兩個字符串(包括終止符)的數組。 喜歡:

char string1[128] = "Stack";

要么

char string1[128];
strcpy(string1, "Stack");

在這一行:

while(*s++ = *t++);

您取消引用s ,它指向char數組"stack"的最后一位。 這會導致segmentation fault錯誤。

該程序嘗試將字符追加到文字字符串"stack" 不要那樣做 創建一個足以容納結果的字符數組,將第一個字符串復制到該數組中,然后strcat其余字符串。

哦,給您的函數命名,而不是strcat 該名稱已被使用。

 char *name1;
 char *name2;
 name1 = "stack" ;
 name2 = "overflow";

==>

 char name1[20];
 char name2[10];
 memcpy(name1,"stack") ;
 memcpy(name2,"overflow");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM