memcpy错误,长度不正确
Error on memcpy, length not correct
我正在将网关中的数据(包含字符串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
吗?
复制字符串内容,但不复制终止的null字符。给len加一,你就没事了。但正确的解决方案是使用strcpy()
,它会自动复制tralling null字符。
另外,考虑为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 );
没有为dest_data
分配内存(它是一个未初始化的指针),并且memcpy()
没有复制空终止符。为dest_data
分配len + 1
字节的内存,并复制len + 1
以复制空终止符。
您需要复制len+1字节的
此时您忘记了复制空终止符