1樓:匿名使用者
strcpy函式並不保證目標字串有足夠空間---這個需要程式設計師自己保證---其只是從從目標字串的起始地址開始複製源字串的各個字元,直到源字串的尾部'\0';所以複製是可以的。
不過c陣列之後的的記憶體已經被破壞,如果後續還有變數宣告則可能破壞該變數的值,更嚴重的可能寫入程式的**區,從而導致程式崩潰。
sizeof函式只是返回資料型別或變數的大小,所以sizeof(b)=8, sizeof(c)=2,因為當時分配就給了這麼大的空間, 要察看字串長度應該用strlen(c)函式,其中c是 const char *;
可以通過以下程式來驗證:
#include
#include
int main()
2樓:春誤雙卿
這是windows檢測機制不嚴格,你這個**在linux下執行,就會奔潰了,而且在windows下,可能沒有涉及到重要的記憶體,所以沒有異常中斷。其實這個已經記憶體溢位了,所以寫**的時候,還是要自己去控制**的健壯性,不能依賴函式本身。
求C 拷貝建構函式
q嘿仔 include using namespace std template class cmatrix nrow row ncol col 預設建構函式 void setcmatrix int row,int col,const t data 鍵盤輸入 void show 輸出 void in...
關於strcpy字串拷貝的函式的問題
就原來的str cpy函式來說,這個函式是沒有錯誤的,只是這個返回值的用途,看你怎麼用了,如果返回送給函式的形參str1原來的值,就要用temp了 個人感覺這種用法是多餘的,不過標準庫裡也是這麼做的 如果要返回已複製的字串的結尾,大可不用temp,直接改str1就可以了,而且有種奇妙的效果 char...
c 解構函式問題,c 解構函式的問題
1 不是不能定義,是定義了沒意義。因為建構函式不被繼承,而虛擬函式是要在派生類中重定義的2 定義虛解構函式後,由於多型,當使用基類指標指向派生類物件時,會呼叫派生類的虛構函式,然後派生類的解構函式自動呼叫基本解構函式。不是虛的話,直接呼叫基類的解構函式了。如果派生類中有用new分配的記憶體,就無法釋...