如何将const unsigned char * payLoad转换为char *并将其复制?

时间:2018-08-01 02:28:17

标签: c malloc sizeof memcpy const-char

我正在尝试将const unsigned char*转换为char*并进行复制。我尝试了以下代码的几种变体,但通常会遇到内存异常。此函数位于用C编写的应用程序中。

下面的功能是我要创建的

//global variable
char* copiedValue;

void convertUnsignedChar(const unsigned char* message){

    copiedValue = malloc(sizeof(message));
    (void)memcpy(copiedValue, message, sizeof(message));

}

2 个答案:

答案 0 :(得分:1)

问题的很大一部分是sizeof(message),它使指针的大小等于指针的长度,而不是指针的指向。

或者将长度传递给函数,或者(如果数据是一个以空值终止的字符串)使用strlen来获取长度(但不要忘记为终止符添加一个!)或以上提到的strdup函数(如果有)。

答案 1 :(得分:1)

malloc(sizeof(message))仅为char *指针分配空间,可能为8个字节。您需要为message指向的数据分配空间。

有一个问题:message指向多少数据?它终止为null吗?假设它是,那么您可以使用strlen。不要忘记空字节的空间!

copiedValue = malloc(strlen((char*)message) + 1);

memcpy类似。

memcpy(copiedValue, message, strlen((char*)message) + 1);

请注意,无需将memcpy的返回值强制转换为void


或使用POSIX strdup函数。

copiedValue = strdup((char *)message);