簡體   English   中英

C中帶指針的字符串串聯

[英]String Concatenation in C with Pointers

因此,這是C中的標准字符串連接代碼:

char *stringcat(char *dest, const char *src){
    char *save=dest;
    while(*save !='\0'){
        save++;
    }
    while(*src!='\0'){
        *save=*src;
        save++;
        src++;
    }
    *save='\0';
    return dest;
}

我的問題是為什么當我們用以下內容替換第一個while循環時:

while(*save++){};

它不起作用,但是當替換為:

while(*++save){};

確實有效。 在前兩個實例中,保存指向末尾dest處的空終止符,然后將其用src中的第一個字符覆蓋。 但是,在第三種情況下,似乎save將指向空終止符之后的字符,這很奇怪。

while(*save++) 

首先解引用保存,然后將該值與0進行比較,然后遞增保存。

while(*save !='\0'){
    save++;
}

第一次解引用保存,與0比較,並且僅在非零時遞增。 看到不同?

如果while (*save++) {}時進行操作,則重復的操作是:加載字節,增量指針,檢查字節是否為零。 因此,在字符串末尾將發生的事情是:加載空字節,遞增指針,檢查字節是否為零,是否為零,退出循環。 因此, save將指向空字節之后。 但是,您想開始該空字節的頂部而不是在其之后復制第二個字符串。

(是否有可能在您的頭上互換了++savesave++的含義?如果這樣,這是一個有用的助記符: ++save表示遞增,然后加載值; save++表示加載值,然后遞增。因此變量名稱和++出現的順序與操作順序相對應。)

暫無
暫無

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

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