我正在尝试将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));
}
答案 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);