用於複製字串的函式是strcpy,它的原型是
char *strcpy(char *dst,char const *src);
這個函式把引數src字串複製到dst引數。如果引數src和dst在記憶體中出現重疊,其結果是未定義的,由於dst引數將進行修改,所以它必須是個字元陣列或者是乙個指向動態分配記憶體的陣列的指標,不能使用字串常量。
1、目標引數的以前內容將被覆蓋並丟失。即使新的字串比dst原先的記憶體更短,由於新的字串是以nul位元組結尾,所以老字元最後剩餘的幾個字元也會被有效的刪除
第乙個位元組後面的幾個字元再也無法被字串函式訪問,因此從任何現實的角度看,它們都已經是丟失的了。
2、如果字串比數組長,多餘的字串扔被複製,它們將覆蓋原來儲存於陣列後面的記憶體空間的值。strcpy無法解決這個問題,因為它無法判斷目標字元陣列的長度。
第二個字串太長了,無法容納與message字元陣列中。因此,strcpy函式將侵占陣列後面的部分記憶體空間,改寫原來恰好儲存在**的變數。如果你在使用這個函式之前確定目標函式足以容納源字串,就可以避免大量的除錯工作。
strcpy 的使用注意事項
函式原型 char strcpy char dst,char const src 1 dst 必須是乙個字元陣列或者指向動態記憶體分配的字元陣列的指標,不能使用字串常量 2 如果src字串長度小於dst字元陣列長度,那src中的字串將被拷貝到dst字元陣列中,且dst中剩餘的字元也會被有效的刪除。安...
inline函式注意事項
1.在類中定義這種函式 class classname 如果在類中直接定義,不需要用inline修飾,編譯器自動化為 內聯函式 此說法在 c primer 中提及 2.在類外定義前加inline 關鍵字 class account 與1相同 double getbalance 在類中宣告 doubl...
memset函式注意事項
memset 函式是記憶體賦值函式,用來給某一塊記憶體空間進行賦值的。其原型是 void memset void dst,int val,size t size 使用時在檔案頭加上 include stdlib.h dst是目標起始位址,val是要賦的值,size是要賦值的位元組數。例1 char ...