我正在将网关中的数据(包含字符串Oct/10/12
)复制到dest_data
,但dest_data
获取的字符数多于源:
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
吗?
发布于 2012-10-30 23:12:47
复制字符串内容,但不复制终止空字符。向len中添加一个,您应该就可以了。但是正确的解决方案应该是使用strcpy()
,它会自动复制尾随的空字符。
另外,考虑为dest_data (malloc((len + 1) * sizeof(*dest_data));
)分配内存
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 );
发布于 2012-10-30 23:13:02
没有为dest_data
分配内存(它是一个未初始化的指针),并且memcpy()
没有复制null终止符。为dest_data
分配len + 1
字节的内存,并复制len + 1
以同时复制空终止符。
发布于 2012-10-30 23:12:47
你需要复制len +1个字节
此时,您忘记复制空终止符\0
。
当您尝试访问副本时,字符串函数会进行搜索,直到它们找到可能位于任何位置的\0
。
https://stackoverflow.com/questions/13141965
复制相似问题