1,memcpy、memmove函式以及二者的區別
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include
功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。
注意:.source和destin所指的記憶體區域可以重疊,但是如果source和destin所指的記憶體區域重疊,那麼這個函式並不能夠確保source所在重疊區域在拷貝之前被覆蓋。而使用memmove可以用來處理重疊區域。函式返回指向destin的指標。
原型:void memmove( void dest, const void* src, size_t count ); //兩次拷貝,原到目的,目的再拷回原
標頭檔案:#include;
功能:memmove用於從src拷貝count個字元到dest,如果目標區域和源區域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中。但複製後src內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函式功能相同。由src所指記憶體區域複製count個位元組到dest所指記憶體區域。
小結
他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。但memcpy的效率要比memmove的效率高。
2,strlen 和 sizeof 的區別
(1)sizeof是運算子,strlen是函式
(2)sizeof可以用型別做引數,strlen只能用char*做引數,且必須是以」\0」結尾的
(3)strlen 測量的是字元的實際長度,以』\0』 結束。而sizeof 測量的是字元的分配大小。
(4)strlen的結果要在執行的時候才能計算出來,是用來計算字串的長度,不是型別佔記憶體的大小。
(5)sizeof 如果計算型別的大小時要加(),即sizeof(int);如果是變數名可以不加()
(6)陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。
(7)當使用了於乙個結構型別時或變數, sizeof 返回實際的大小,當使用一靜態地空間陣列, sizeof 歸還全部陣列的尺寸。
(8)sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。
該型別保證能容納實現所建立的最大物件的位元組大小。
(9)可以用sizeof(arr)/sizeof(arr[0])求陣列元素的個數。
C C 面試常見題目之字串操作(二)
字串是一種常用的資料型別,現在我們將其常用的功能用 實現如下 class string len 0 拷貝構造 string const char s 拷貝構造 string char c,int n memset ptr,c,n const string 拷貝建構函式的原型,1,引用可以改變實參,不...
c c 面試45 50之字串
45 使用庫函式將數字轉換為字串,下面是常用庫函式 1 itoa 將整型轉換為字串 2 ltoa 將長整形轉換為字串 3 gcvt 將浮點轉換為字串 46 不使用庫函式將整數轉換為字串 通過把整數的各位上的數字加上 0 轉換為char型別並存到字元陣列 1 1 include 2 using nam...
C C 題目 字元與字串
char a 4 char b 4 答案 abcd efg 分析 由於字串是以 0 為結尾的,所以陣列a不是乙個字串。陣列b列印直到空字元為止有7個字元顯示。而陣列a讀取了 d 字元之後,便在其隨後的位元組繼續解釋要列印的字元,直到遇到空字元為止。const int arsize 5 char na...