您的位置:首页 > 其它

strcpy, sprintf,memcpy的区别

2012-03-19 14:37 411 查看
它们的区别在于实现功能以及操作对象的不同。

strcpy函数的操作对象是字符串,完成从源字符串到目的字符串的拷贝;

sprintf函数的操作对象不限于字符串,虽然目的对象是字符串,但是源对象可以是字符串,也可以是任意基本类型的数据。这个函数主要用来实现字符串或基本数据类型,向字符串的转化功能。

memcpy函数,顾名思义就是内存拷贝,实现将一个内存块的内容复制到另一个内存块。内存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表就是在内存中占据一席之地。因此,memcpy的操作对象适用于任意数据类型。鉴于memcpy函数等长拷贝的特点,以及数据类型代表的物理意义,memcpy函数通常限于同种类型数据或对象之间的拷贝,其中当然也包括字符串拷贝以及基本数据类型的拷贝。

对于字符串拷贝来说,

strcpy 无疑是最合适的选择,效率高且调用方便。

sprintf要额外指定格式符,并且进行格式转化,麻烦其效率不高。

memcpy虽然高效,但是需要额外提供拷贝的内存长度这一参数(最优长度是源字符串长度+1),易错且使用不便。

strcpy和memcpy功能上也有些差别:

比如:

const char *str1 = "abc\0def";

char str2[7];

strcpy(str2, str1);

结果:str2 = "abc",也就是说,strcpy是以'\0'为结束标志的。

而,memset(str2, 7);

memcpy(str2, str1, 7);

结果:str2 = "abc\0def".
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: