1. 程式人生 > >strcpy,snprintf,memcpy的區別

strcpy,snprintf,memcpy的區別

這些函式的區別在於 實現功能 以及 操作物件 不同。
strcpy 函式操作的物件是 字串 ,完成 從 源字串 到 目的字串 的 拷貝 功能。
snprintf 函式操作的物件 不限於字串 :雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。這個函式主要用來實現 (字串或基本資料型別)向 字串 的轉換 功能。如果源物件是字串,並且指定 %s 格式符,也可實現字串拷貝功能。
memcpy 函式顧名思義就是 記憶體拷貝 ,實現 將一個 記憶體塊 的內容複製到另一個 記憶體塊 這一功能。記憶體塊由其首地址以及長度確定。程式中出現的實體物件,不論是什麼型別,其最終表現就是在記憶體中佔據一席之地(一個記憶體區間或塊)。因此,memcpy 的操作物件不侷限於某一類資料型別,或者說可 適用於任意資料型別

,只要能給出物件的起始地址和記憶體長度資訊、並且物件具有可操作性即可。鑑於 memcpy 函式等長拷貝的特點以及資料型別代表的物理意義,memcpy 函式通常限於同種型別資料或物件之間的拷貝,其中當然也包括字串拷貝以及基本資料型別的拷貝。
對於字串拷貝來說,用上述三個函式都可以實現,但是其實現的效率和使用的方便程度不同:

  • strcpy 無疑是最合適的選擇:效率高且呼叫方便。
  • snprintf 要額外指定格式符並且進行格式轉化,麻煩且效率不高。
  • memcpy 雖然高效,但是需要額外提供拷貝的記憶體長度這一引數,易錯且使用不便;並且如果長度指定過大的話(最優長度是源字串長度 + 1),還會帶來效能的下降。其實 strcpy 函式一般是在內部呼叫 memcpy 函式或者用匯編直接實現的,以達到高效的目的。因此,使用 memcpy 和 strcpy 拷貝字串在效能上應該沒有什麼大的差別。
對於非字串型別的資料的複製來說,strcpy 和 snprintf 一般就無能為力了,可是對 memcpy 卻沒有什麼影響。但是,對於基本資料型別來說,儘管可以用 memcpy 進行拷貝,由於有賦值運算子可以方便且高效地進行同種或相容型別的資料之間的拷貝,所以這種情況下 memcpy 幾乎不被使用。memcpy 的長處是用來實現(通常是內部實現居多)對結構或者陣列的拷貝,其目的是或者高效,或者使用方便,甚或兩者兼有。
另外, strcpy和memcpy功能上也有些差別: 比如: const char *str1="abc/0def"; char str2[7];
首先用strcpy實現: strcpy(str2,str1) 得到結果:str2="abc";也就是說,strcpy是以'/0'為結束標誌的。
再用memcpy實現: memset(str2,7); memcpy(str2,str1,7); 得到結果:str2="abc/0def"; 也就是說,memcpy是對記憶體區域的複製。當然,不僅能夠複製字串陣列,而且能夠複製整型陣列等其他陣列

相關推薦

strcpy,snprintf,memcpy區別

這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串 ,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串 :雖然目

strcpymemcpy區別

strcpy和memcpy都是標準C庫函式,它們有下面的特點。 strcpy提供了字串的複製。即strcpy只用於字串複製,並且它不僅複製字串內容之外,還會複製字串的結束符。 已知strcpy函式的原型是:char* strcpy(char* dest, const char* src);m

memcpystrcpysnprintf區別

這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串:雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。這個函式主

strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、區別和效率

1、 strcpy strcpy 是依據 /0 作為結束判斷的,/0會被拷貝。如果 to 的空間不夠,則會引起 buffer overflow。strcpy 常規的實現程式碼如下(來自 OpenBSD 3.9): char *strcpy(char *to,

strcpymemcpy區別

字符串變量 函數 font pan -- 有效 簡述 溢出 mil strcpy和memcpy的區別 strcpy和memcpy都是標準C庫函數,它們有下面的特點。 strcpy提供了字符串的復制。即strcpy只用於字符串復制,並且它不僅復制字符串內容之外,還會復制字符

strcpymemcpy區別

1)複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意型別的內容。strcpy只用於字串複製,並且還會複製字串的結束符。memcpy對於複製的內容沒有限制,用途更廣。 2)複製的方法不同。strcpy不需要指定長度,遇到結束符’\0’才會結束,所以容易溢位。memcpy則

筆試題:strcpymemcpy,memset 的區別

1、strcpy strcpy的作用是拷貝字串,當它遇到'\0'時結束拷貝。 原型為:extern char *strcpy(char *dest,char *src); 就是把src的字串複製到dest中。 2、memcpy memcpy用來做記憶體拷貝,可以拿它拷

linux中strcpymemcpy的用法與區別

strcpy提供了字串的複製,以 \0 為結束標誌(即一旦遇到資料值為0的記憶體地址,拷貝過程即結束)。 函式原型如下: char *strcpy(char *dest, const char *src); 其在核心(lib\string.h)原始碼的實現如下: char

strcpy/strncpy/sprintf/_snprintf/snprintf區別

1. char *strcpy(char *str1, char *str2); 串拷貝 #include <stdio.h> #include <string.h> int main(void) { char string[10];

完成字串拷貝(sprintf、strcpymemcpy 函式)函式之間的區別

這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串:雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。 這個函式主要用來實現 (字串或基本資料型別)向

重寫strstr、strcpymemcpy、memset、atof算法

tdi rcp tin amp tof mys log != include 1 #include<stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #incl

strcpymemcpy c語言實現

  以下程式碼沒有考慮重疊的情況 //strcpy char *__strcpy(char *dest, const char *src) { if(dest == NULL || src == NULL) return NULL; char *str

strcpymemcpy

文章目錄 strcpy memcpy strcpy與memcpy區別 strcpy strcpy(dest,src) 把src地址開始且含有 null 結束符

strcpymemcpy的記憶體重疊處理

strcpy和memcpy同是一個型別的函式,但實質上卻是不同的,他們的原型分別為: char *strcpy(char *dest, const char *src);void *memcpy(void *dest, const void *src, size_t coun

C字串函式strcmp\strcpy\strcat\memcpy

1.strcmp int strcmp(const char* str1, const char*str2){ assert(str1 != NULL&&str2 != NULL); while (*str1&&am

strcpymemcpy函式的實現

本文轉載自:strcpy函式實現 大家一般認為名不見經傳strcpy函式實現不是很難,流行的strcpy函式寫法是: char *my_strcpy(char *dst,const char *src) { assert(dst != NULL);

strcpy、strncpy與memcpy區別與使用方法

flow class created 行為 ons return sizeof creat 數組 今天做題用到了這兩個函數,不是很懂,學習了下~ 轉自http://www.cnblogs.com/houjun/p/4913216.html 本文參考《C 標準庫》編寫。

strcpy、sprintf、memcpy區別

使用 orm des 內存拷貝 font 行數據 現在 mat 空間 char*strcpy(char *dest, const char *src); 其對字符串進行操作,完成從源字符串到目的字符串的拷貝,當源字符串的大小大於目的字符串的最大存儲空間後,執行該操作會出現段

面試題10——簡述strcpy,sprintf,memcpy區別

三者主要有一下不同之處: (1)操作物件不同: strcpy的兩個操作物件均是字串 sprintf的操作源物件可以是多種資料型別,目的操作物件是字串 memcpy的兩個物件就是兩個人一可操作的記憶體地址,不限於何種資料型別。 (2)執行效率不同: memcpy最高,strcpy次之,spri

strcpy和sprintf和memcpy區別.md

strcpy、sprintf和memcpy的區別 下面程式碼說明: #include <iostream> using namespace std; #include <string.h> void strcpyMethod() { /