8.2 我的 strcat() 不行.我試了  char *s1 = "Hello, "; char *s2 = "world!"; char *s3 = strcat(s1, s2);  但是我得到了奇怪的結果。

跟前面的問題 7.1 一樣, 這裡主要的問題是沒有正確地為連接 結果分配空間。C 沒有提供自動管理的字符串類型。C 編譯器只為源碼 中明確提到的對象分配空間 (對於字符串, 這包括字符數組和串常量)。 程序員必須為字符串連接這樣的運行期操作的結果分配足夠的空間, 通常可以通過聲明數組或調用 malloc() 完成。

strcat() 不進行任何分配; 第二個串原樣不動地附加在第一個之後。 因此, 一種解決辦法是把第一個串聲明為數組:

    char s1[20] = "Hello, ";
由於 strcat() 返回第一個參數的值, 本例中為 s1, s3 實際上是多 余的; 在 strcat() 調用之後, s1 包含結果。

提問中的 strcat() 調用實際上有兩個問題: s1 指向的字符串常數, 除了空間不足以放入連接的字符串之外, 甚至都不一定可寫。 參見問題 1.13

參考資料: [CT&P, Sec. 3.2 p. 32]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)