首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >memcpy出错,长度不正确

memcpy出错,长度不正确
EN

Stack Overflow用户
提问于 2012-10-30 23:11:13
回答 5查看 692关注 0票数 1

我正在将网关中的数据(包含字符串Oct/10/12)复制到dest_data,但dest_data获取的字符数多于源:

代码语言:javascript
运行
复制
unsigned_8   *dest_data
int_16 len;      

len = (int_16)strlen( Gateway ); // len got 9 correctly
(void)memcpy( dest_data, GatewayApplicationRlsDate, len );

dest_data的最终输出是"Oct/10/1210.1.3"

我必须在复制前清理dest_data吗?

EN

回答 5

Stack Overflow用户

发布于 2012-10-30 23:12:47

复制字符串内容,但不复制终止空字符。向len中添加一个,您应该就可以了。但是正确的解决方案应该是使用strcpy(),它会自动复制尾随的空字符。

另外,考虑为dest_data (malloc((len + 1) * sizeof(*dest_data));)分配内存

代码语言:javascript
运行
复制
unsigned_8   *dest_data;
int_16 len;      

len = (int_16)strlen( Gateway ) + 1; 
dest_data = malloc(len * sizeof(*dest_data));
(void)strcpy( dest_data, GatewayApplicationRlsDate );
票数 6
EN

Stack Overflow用户

发布于 2012-10-30 23:13:02

没有为dest_data分配内存(它是一个未初始化的指针),并且memcpy()没有复制null终止符。为dest_data分配len + 1字节的内存,并复制len + 1以同时复制空终止符。

票数 3
EN

Stack Overflow用户

发布于 2012-10-30 23:12:47

你需要复制len +1个字节

此时,您忘记复制空终止符\0

当您尝试访问副本时,字符串函数会进行搜索,直到它们找到可能位于任何位置的\0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13141965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档