memcpy和sprintf的区别

应用场景:如果对于协议传输数据,memcpy比较好,因为可以 严格控制存入数据的位置。但是对于向一块内存连续的存入数据sprintf是比较好的选择。

一、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个字节就可以保存这些数据。如果使用网络传输这些数据,接收方就不能确定接收这些个体数据的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`memcpy`和`sprintf`是两个在C语言中用于处理字符串和内存复制的函数,它们之间有以下区别: 1. 功能不同: - `memcpy`函数用于在内存中进行字节级别的复制,可以将一块内存的内容复制到另一块内存中,不涉及字符串格式化操作。 - `sprintf`函数用于将格式化的数据写入字符串中,将不同类型的数据格式化为字符串并写入指定的缓冲区。 2. 参数不同: - `memcpy`函数的参数包括源内存地址、目标内存地址和要复制的字节数,用于指定复制的源数据和目标位置。 - `sprintf`函数的参数包括目标字符串缓冲区、格式化字符串和要格式化的数据,用于指定将数据格式化后写入的字符串缓冲区。 3. 返回值不同: - `memcpy`函数没有返回值或者返回一个指向目标内存地址的指针。 - `sprintf`函数返回写入到字符串缓冲区的字符数,或者出现错误时返回负值。 4. 使用场景不同: - `memcpy`函数常用于需要直接进行内存拷贝操作的情况,例如将一个数组或结构体的内容复制到另一个数组或结构体中。 - `sprintf`函数常用于对数据进行格式化并写入到字符串中的情况,例如将数字转换为字符串、拼接字符串等。 需要注意的是,`sprintf`函数容易引发缓冲区溢出的问题,因此在使用时应该确保目标字符串缓冲区足够大,并且对格式化字符串的安全性进行验证。如果是简单的字符串拷贝操作,建议使用更安全的函数如`strcpy`或`strncpy`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值