sprintf,strcpy和memcpy区别

2017-09-16  本文已影响0人  饭饭H

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 拷贝字符串在性能上应该没有什么大的差别。

上一篇 下一篇

猜你喜欢

热点阅读