char call[64] = {'\0'} /* clean buffer */
strncpy(call, info.called, sizeof(call));
代碼複製最多字符我總是用sizeof運算爲目標的保護溢出,櫃面源比目標更高。這樣我可以防止緩衝區溢出,因爲它只會複製到目標可以處理的程度。
但我現在想知道它是否會終止目的地。
一些情況。
1)如果來源較大。 我可以這樣做:
call[strlen(call) - 1] = '\0'; /* insert a null at the last element.*/
2)如果源小於目標。 調用是64字節,我複製50個字節,因爲這是源的大小。它會自動將null放在51元素中嗎?
非常感謝的任何信息,
一個簡單的方法來確保目的地nul終止在這裏是做call [sizeof call -1] = 0; – nos 2009-07-24 10:05:07
我不認爲strncpy會終止字符串。通過不終止字符串。這會導致一個真正的問題嗎?也可以通過調用[strlen(info.called - 1] ='\ 0');如果源代碼大於或小於目的地,終止的正確方法是什麼?謝謝。 – ant2009 2009-07-24 10:10:20
是的,一個未終止的字符串會導致` strlen()`,`strcat()`等錯誤,損壞內存和/或崩潰。當字符串比目標短時,將緩衝區的最後一個字節設置爲零不會造成任何損害。 – 2009-07-24 10:13:06