[英]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.