簡體   English   中英

這個字符串連接函數怎么了

[英]what's wrong with this string concatenation function

為什么這段代碼不能正常工作? 這是K&R練習5-3

char str[20]= "Hello world";
char str2[5] = "xxx";
int main(void) {
    strcat(str, str2);
    printf("%s", str);
    return 0;
}

void strcat(char *s, char *a) {
    while (*s++);
    while (*s++ = *a++);
}

這是因為while(*s++); 即使在退出下一條語句之前命中NULL字符串終止符,它仍然會遞增s 嘗試:

while (*s) {
    s++;
}

這樣s沒有得到增加,當s變空。 這樣,第一個字符a可以覆蓋為NULL結束s

后綴遞增/遞減具有較高的優先級,但是操作數的實際遞增或遞減會延遲(要在語句完成執行之前的某個時間完成)。 所以在語句y = x * z ++; z的當前值用於評估表達式(即z ++評估為z),並且z僅在完成所有其他操作之后才遞增( http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm

更改

while(*s++)

while(*s && *(++s));

因此,為了使指針指向最后一個地址,先遞增s,然后對其進行檢查。

暫無
暫無

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

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