3
我將與Ubuntu 8.04(gcc版本4.2.4)配合使用的程序移植到10.04(gcc版本4.4.3)。我有以下代碼:strstr:使用不同版本的gcc的行爲不同
#include <stdio.h>
#include <string.h>
int main(void) {
char p[100] = "////abcd";
char *t;
/* Remove duplicate slashes, saving only one of them */
while (t = strstr(p, "//"))
strcpy(t, t + 1);
printf("%s\n", p);
return 0;
}
結果應該是/abcd
,它是用gcc 4.2.4。使用4.4.3,輸出爲/accd
。
你可以給我一個代碼改變,它會使用兩個版本的gcc給出正確的輸出,並且最好解釋一下這裏發生了什麼。
在此先感謝!
Johan在**編譯gcc之前**是不吉利的** 4.4.3 – pmg
很酷。代碼庫中塞滿了類似的用法。 :)所以,現在我已經實現了我自己的strcpy來解決這個問題。謝謝! – Johan
@pmg說了什麼。我們都應該爲那些以容易觀察到的方式呈現自己的錯誤而感到幸運,而不是多年來處於休眠狀態。 –