如何在这两个函数上分配内存

时间:2018-03-23 17:08:29

标签: c

char* bit_encrypt(const unsigned char* text) 

unsigned char* bit_decrypt(const char* text) 

您好如何使用unsigned在这两种类型的函数上分配内存和返回值? 当我尝试在第一个函数

中进行分配时出现此错误
error: pointer targets in passing argument 1 of ‘strlen’ differ in signedness [-Werror=pointer-sign]

unsigned char* binary = (unsigned char*)malloc((strlen(text) + 1) * sizeof(char));

如何摆脱此错误?

1 个答案:

答案 0 :(得分:1)

您可以简单地将unsigned char *转换为char *。像这样:

unsigned char* binary = (unsigned char*)malloc(strlen((char*)text) + 1);

你不必像你那样投射malloc结果。这是不必要的,因为在这种情况下void *会自动安全地提升为任何其他指针类型。并且它增加了代码的混乱,强制转换不易读取(特别是如果指针类型很长,就像unsigned char一样)。

根据Basile Starynkevitch的建议,您不必乘以sizeof(char)。最后,代码将如下所示:

unsigned char* binary = malloc(strlen((char*)text) + 1);