应用场景:如果对于协议传输数据,memcpy比较好,因为可以
严格控制存入数据的位置。但是对于向一块内存连续的存入数据sprintf是比较好的选择。
函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
memset:对于一块内存赋值,赋值的步长以一个字节计8个bite计算。不管是什么类型的,写入的二进制数是相同的。
例如:
(1)错误示范:int n;memset(&n,1,sizeof(int));就会赋值四个1。而不是想要的1,因为int是4个字节,每个字节都会赋值给1,这样就是0x01010101了。
(2)清空一个结构类型的变量或数组:struct sample_strcut stTest;memset(stTest,0,sizeof(struct sample_strcut));
二、sprintf函数原型
int sprintf( char *buffer, const char *format, [ argument] … );
sprintf是格式化的数据依次写入到一块内存中(有的说是一个字符串缓冲,这个对吗???说的是char*,但不能是串吧!!),属于紧缩的方式。不会按照类型长度写入。
比如:
两者在内存中的表现完全不同。sprintf不需要20个字节就可以保存这些数据。如果使用网络传输这些数据,接收方就不能确定接收这些个体数据的位置。
一、memset函数原型
void *memset(void *s, char ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
memset:对于一块内存赋值,赋值的步长以一个字节计8个bite计算。不管是什么类型的,写入的二进制数是相同的。
例如:
(1)错误示范:int n;memset(&n,1,sizeof(int));就会赋值四个1。而不是想要的1,因为int是4个字节,每个字节都会赋值给1,这样就是0x01010101了。
(2)清空一个结构类型的变量或数组:struct sample_strcut stTest;memset(stTest,0,sizeof(struct sample_strcut));
二、sprintf函数原型
int sprintf( char *buffer, const char *format, [ argument] … );
sprintf是格式化的数据依次写入到一块内存中(有的说是一个字符串缓冲,这个对吗???说的是char*,但不能是串吧!!),属于紧缩的方式。不会按照类型长度写入。
比如:
char *uuid = "Liping@luopingelec.com";
int time = 32459812;
int height = 1024;
int wide = 768;
int rate = 25;
char VedioInfo[60] = {0};
memcpy(VedioInfo,uuid,strlen(uuid));
memcpy(VedioInfo+36,&time,4);
memcpy(VedioInfo+40,&height,4);
memcpy(VedioInfo+44,&wide,4);
memcpy(VedioInfo+48,&rate,4);
若是采用sprintf((VedioInfo,"%s%d%d%d%d","123654",time,height,wide,rate);
两者在内存中的表现完全不同。sprintf不需要20个字节就可以保存这些数据。如果使用网络传输这些数据,接收方就不能确定接收这些个体数据的位置。