假設我有一些遺留代碼,它是使用對C STL函數(如strcpy)的不安全調用編寫的。我們都知道strcpy是不安全的,因爲它會讓程序容易受到緩衝區溢出問題的影響。假設我要將所有呼叫替換爲strcpy,並撥打電話strncpy。將所有呼叫替換爲strcpy(dest, src)的技術將涉及使用參數(dest, src, length of dest - 1)呼叫strncpy,然後使用\0終止des
爲了鍛鍊我在C語言中的編程技巧,我試圖自己編寫strncpy函數。這樣做,我一直在犯錯誤,解決他們中的大多數,最終我陷入了沒有進一步的靈感繼續下去。 我收到的錯誤是: ex2-1.c:29:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
好了,我試圖解決我的C++任務,但是當我使用strcpy_s它僅適用於我的陣列,而不是我的*指針。這裏就是我一起工作: HotelRoom::HotelRoom(char Num[], int cap, double daily, char* name, int Stat)
{
strcpy_s(room_Num, Num); //copy first argument into room_N
我的代碼正常運行且沒有內存泄漏。但是,我得到的valgrind錯誤: ==6304== 14 errors in context 4 of 4:
==6304== Invalid write of size 1
==6304== at 0x4A0808F: __GI_strcpy (mc_replace_strmem.c:443)
==6304== by 0x401453: main (ca