[英]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
將指向空字節之后。 但是,您想開始在該空字節的頂部而不是在其之后復制第二個字符串。
(是否有可能在您的頭上互換了++save
和save++
的含義?如果這樣,這是一個有用的助記符: ++save
表示遞增,然后加載值; save++
表示加載值,然后遞增。因此變量名稱和++
出現的順序與操作順序相對應。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.