2012-10-31 46 views
3

我正在查看關於strcpy()strcat()的手冊。似乎沒有辦法評估函數調用的「成功」。 (即返回值永遠不會是NULL),那是正確的嗎?無論如何檢查str函數的成功嗎?

它只是假設,如果你遵循這些函數的輸入規則,輸出將是有效的?只是想確保我沒有在這裏丟失任何東西......

回答

5

這些函數不能以任何明確定義的方式失敗。他們要麼成功,要麼事情發生嚴重錯誤(例如缺少0個字符或者輸出緩衝區太小),並且可能發生任何事情。

1

因爲我不認爲像這樣的功能真的有任何方式知道「成功」是什麼。例如,strcpy實際上只是memcpy。就C而言,它只是從一個存儲單元獲取數據並將其複製到另一個存儲單元。它不知道數據應該如何顯示,或者以您期望的方式進行格式化。我猜想,只有真正的方法,你會知道如果成功與否,如果你最終得到一個段錯誤或不。

1

只要您不調用未定義的行爲,這些函數就能保證工作。特別是,您正在寫入的內存需要分配。除了崩潰你的程序之外,他們真的沒有辦法失敗。

一般來說,因爲很難判斷要寫入多少字節,所以不鼓勵使用這些函數。如果可以,請使用strncpystrncat