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".
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".
相关文章推荐
- strcpy,sprintf,memcpy的区别
- sprintf、strcpy和memcpy的区别
- 简述strcpy、sprintf与memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy,sprintf,memcpy的区别, Sizeof与Strlen的区别
- 字符串拷贝函数 sprintf、strcpy 及 memcpy 的区别
- strcpy,sprintf,memcpy的区别, Sizeof与Strlen的区别
- strcpy、sprintf、memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy,sprintf,memcpy的区别
- strcpy sprintf memcpy 区别
- strcpy,sprintf,memcpy的区别
- strcpy/sprintf/memcpy的区别及适用场景
- strcpy sprintf memcpy 它们之间的区别
- strcpy,sprintf,memcpy 的区别
- strcpy,sprintf,memcpy的区别, Sizeof与Strlen的区别
- sprintf、strcpy和memcpy的区别