對比C語言中memccpy()函數(shù)和memcpy()函數(shù)的用法
C語言memccpy()函數(shù):復(fù)制內(nèi)存中的內(nèi)容
頭文件:
#include <string.h>
定義函數(shù):
void * memccpy(void *dest, const void * src, int c, size_t n);
函數(shù)說明:memccpy()用來拷貝src 所指的內(nèi)存內(nèi)容前n 個字節(jié)到dest 所指的地址上。與memcpy()不同的是,memccpy()會在復(fù)制時檢查參數(shù)c 是否出現(xiàn),若是則返回dest 中值為c 的下一個字節(jié)地址。
返回值:返回指向dest 中值為c 的下一個字節(jié)指針。返回值為0 表示在src 所指內(nèi)存前n 個字節(jié)中沒有值為c的字節(jié)。
范例
#include <string.h> main(){ char a[] = "string[a]"; char b[] = "string(b)"; memccpy(a, b, 'B', sizeof(b)); printf("memccpy():%s\n", a); }
執(zhí)行結(jié)果:
memccpy():string(b)
C語言memcpy()函數(shù):復(fù)制內(nèi)存內(nèi)容(忽略\0)
頭文件:
#include <string.h>
memcpy() 用來復(fù)制內(nèi)存,其原型為:
void * memcpy ( void * dest, const void * src, size_t num );
memcpy() 會復(fù)制 src 所指的內(nèi)存內(nèi)容的前 num 個字節(jié)到 dest 所指的內(nèi)存地址上。
memcpy() 并不關(guān)心被復(fù)制的數(shù)據(jù)類型,只是逐字節(jié)地進(jìn)行復(fù)制,這給函數(shù)的使用帶來了很大的靈活性,可以面向任何數(shù)據(jù)類型進(jìn)行復(fù)制。
需要注意的是:
dest 指針要分配足夠的空間,也即大于等于 num 字節(jié)的空間。如果沒有分配空間,會出現(xiàn)斷錯誤。
dest 和 src 所指的內(nèi)存空間不能重疊(如果發(fā)生了重疊,使用 memmove() 會更加安全)。
與 strcpy() 不同的是,memcpy() 會完整的復(fù)制 num 個字節(jié),不會因?yàn)橛龅健癨0”而結(jié)束。
【返回值】返回指向 dest 的指針。注意返回的指針類型是 void,使用時一般要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
代碼示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N (10) int main() { char* p1 = "abcde"; char* p2 = (char*)malloc(sizeof(char) * N); char* p3 = (char*)memcpy(p2, p1, N); printf("p2 = %s\np3 = %s\n", p2, p3); free(p2); p2 = NULL; p3 = NULL; system("pause"); return 0; }
運(yùn)行結(jié)果:
p2 = abcde p3 = abcde
代碼說明:
1) 代碼首先定義p1,p2,p3三個指針,但略有不同,p1指向一個字符串字面值,給p2分配了10個字節(jié)的內(nèi)存空間。
2) 指針p3通過函數(shù)memcpy直接指向了指針p2所指向的內(nèi)存,也就是說指針p2、p3指向了同一塊內(nèi)存。然后打印p2,p3指向的內(nèi)存值,結(jié)果是相同的。
3) 最后按照好的習(xí)慣釋放p2,并把p3也置為NULL是為了防止再次訪問p3指向的內(nèi)存,導(dǎo)致野指針的發(fā)生。
上一篇:C語言中操作utmp文件的相關(guān)函數(shù)用法
欄 目:C語言
下一篇:C語言中正切的相關(guān)函數(shù)總結(jié)
本文標(biāo)題:對比C語言中memccpy()函數(shù)和memcpy()函數(shù)的用法
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2830.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?