sprintf,strcpy和memcpy区别
char*str ="heluiiulo";
chardesStr[0];
1.
strcpy函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝
int -> char
sprintf(desStr,"%d",56);
printf(" desDtr = %s\n", desStr);
2.
sprintf函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本数据类型的数据。 功能: 是是现实其他数据类型(字符串或任意基本数据类型) 吸纳高字符串的转化。 方法中需要指定源对象的数据类型,如果源对象是字符串,也可以实现字符串的拷贝功能。
char -> char
sprintf(desStr,"%s", str);
printf(" desDtr = %s\n", desStr);
3.
memcpy顾名思义是 内存拷贝, 实现将一个内存块的内容复制到另一个内存块。 内存块由其首地址及长度决定。 程序中出现的实体对象,不论是什么类型,其最终表现就是在内存中占据一席之地(一个内存区间块)。因此memcpy操作的对象不局限于某一类数据类型,或者说 可适用于人意数据类型,只要能给出对象的其起始地址和内存长度,并且对象具有可操作性, 鉴于memcpy函数等长拷贝的特点,以及数据类型代表的无力意义,memcpy通常用于通知数据类型货 对象之间的拷贝,其中也包括字符串遗迹基本数据类的拷贝
memcpy(desStr, str,4); //拷贝字符串
intc =8;
intd =0;
memcpy(&d, &c,1); //拷贝基本数据类型
printf("%d--%s", d, desStr);
strcpy 无疑是最合适的选择:效率高且调用方便。
sprintf 要额外指定格式符并且进行格式转化,麻烦且效率不高。
memcpy
虽然高效,但是需要额外提供拷贝的内存长度这一参数,易错且使用不便;并且如果长度指定过大的话(最优长度是源字符串长度 +
1),还会带来性能的下降。其实 strcpy 函数一般是在内部调用 memcpy 函数或者用汇编直接实现的,以达到高效的目的。因此,使用
memcpy 和 strcpy 拷贝字符串在性能上应该没有什么大的差别。