背後的原因,我已經做了測試,其中就出現了這樣的事情:這個輸出
char* trim(char* strr, char* str1) {
char* s = strr;
while(*str1 == 32) str1++;
while((*str1 != 32) && (*str1 != 0))
*s++ = *str1++;
*s = 0;
return strr;
}
int main(void) {
char str[20] = "???";
char str1[20] =" bcd \0";
printf("(%s)\n(%s)\n", str, trim(str, str1));
return(0);
}
的問題是:什麼上面的代碼將打印,爲什麼?我對輸出結果和原因有了一些線索,但我希望聽到更多有經驗的人士的意見。
乍一看,它看起來像它會打印:
(???)
(bcd)
但在現實中產生的輸出是:
(bcd)
(bcd)
是不是你覆蓋str? – 2013-04-09 23:50:27
@JaynathanLeung這個功能沒有完成,我只是複製和過去。 – dreamcrash 2013-04-09 23:51:44
由於trim是一個參數並在printf之前運行,所以well str正在被修剪覆蓋。 – 2013-04-09 23:52:40