我在寫一個簡單的字符串連接程序。查找字符串的結尾:* s ++ VS * s then s ++
該程序以我發佈的方式工作。但是,我首先使用下面的代碼來編寫代碼來查找字符串的末尾:
while (*s++)
;
但是,該方法不起作用。我傳給它的字符串沒有正確複製。具體來說,我試圖將「abc」複製到保存「\ 0」的char []變量中。
從閱讀C K & R書,它看起來應該工作。該緊湊形式應採取以下步驟。
- * S與 '\ 0' 相比
- s指向下一個地址
那麼,爲什麼不工作?我正在用Debian上的gcc編譯。
我發現,這個版本沒有問題:
strncat(char *s, const char *t, int n)
{
char *s_start = s;
while (*s)
s++;
for (; n > 0 && *t; n--, s++, t++)
*s = *t;
*(s++) = '\0';
return s_start;
}
在此先感謝。
供將來參考「沒有用」。 *不是*失敗模式的有用描述。結果與預期結果有什麼不同? – dmckee 2010-02-01 04:45:34
不相關的筆記,每當做非明顯的東西,使用括號。你可能還記得現在++在運算符優先級表中位於*之上,但是經過7個小時的編碼之後,你真的開始懷疑是否* s ++;意思是*(s ++);或(* s)++; – 2010-02-01 08:18:53
只是一個附註:爲該功能取另一個名稱。這不是strncat的工作原理。 – quinmars 2010-02-01 12:34:37