memcpy strcpy和strncpy的簡介

2021-08-07 04:30:56 字數 1172 閱讀 7827

在c的操作中,對陣列類資料進行批量賦值一般通過memcpy、strcpy和strncpy這三種函式進行,這裡將為其進行介紹.

這三者的區別在於strcpy和strncpy只能對字串的資料進行拷貝,無法用於拷貝中間含有null的資料。

函式的標頭檔案: string.h

1.memcpy

函式名:void *memcpy(void *dest, void *src, size_t n);

功能:將src所指的位址內容拷貝到dest所指的內容處,其為各種拷貝函式的基礎。

它可以用於拷貝包括結構體、整型、字元型、類等各類資料。

注意:1.source和destin所指的記憶體區域可能重疊,但是如果source和destin所指的記憶體區域重疊,那麼這個函式並不能夠確保source所在重疊區域在拷貝之前不被覆蓋。而使用memmove可以用來處理重疊區域。函式返回指向destin的指標.

2.如果目標陣列destin本身已有資料,執行memcpy()後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每次執行memcpy後,要將目標陣列位址增加到你要追加資料的位址。

注意:source和destin都不一定是陣列,任意的可讀寫的空間均可。

2.strcpy和strncpy

函式名:char *strcpy(char *dest, char *src);

功能:將dest所指位址的字串拷貝到src所指的位址處,其不限制複製的字串的長度,會導致緩衝的溢位。

附上gblic裡的strcpy原碼:

char *strcpy (char *dest, const char *src)

函式名: char *strncpy(char *dest, char *src, size_t n);

功能:將dest所指位址的字串拷貝到src所指的位址處,若n大於src的長度,則自動用null來填充剩餘的,否則複製對應長度到所指位址,但會導致字串沒有終止符null,其可以克服strcpy的溢位危險。

附上gblic裡的strcpy原碼:

char *strncpy (char *s1, const char *s2, size_t n)

可以發現,資料的拷貝都是依賴於memcpy的,而strcpy和strncpy均只能適用於字串的拷貝,無法用於其它資料的拷貝,特別是如果要拷貝的資料中有著null的話。

此外,提幾個的基於memcpy的函式。

c語言之資料拷貝memcpy strcpy

c語言之資料拷貝memcpy strcpy strcpy和memcpy都是標準c庫函式,它們有下面的特點。strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。已知strcpy函式的原型是 char strcpy char dest,const...

樹狀陣列和ST表

binary index tree 用來解決動態字首和問題的資料結構。樹狀陣列或者二叉索引樹也稱作binary indexed tree,又叫做fenwick樹 它的查詢和修改的時間複雜度都是log n 空間複雜度則為o n 這是因為樹狀陣列通過將線性結構轉化成樹狀結構,從而進行跳躍式掃瞄。通常使用...

ST3 外掛程式和技巧

emmet外掛程式 快速生成html文件結構,快速編寫跨瀏覽器的css並自動幫助你同時編輯,強大 語法技巧 簡單實用,值得掌握 sidebar enhancements外掛程式 改進了側邊欄,增加了許多功能.挺好的 ctrl 滑鼠左鍵 可以多處選中,也可以雙擊乙個,然後ctrl d自動向下選中同名的...