unsigned char* tmp; tmp = realloc(*pc->pbufout, newlen); if (!tmp) return 1;报错信息是error: invalid conversion from ‘void*’ to ‘unsigned char*’ [-fpermissive] 250 | unsigned char* tmp = realloc(*pc->pbufout, newlen);
时间: 2023-08-06 09:09:04 浏览: 47
这个错误提示的原因是realloc函数返回的是void*类型的指针,需要进行强制类型转换才能赋值给unsigned char*类型的指针。
你可以将realloc函数返回的指针先赋值给void*类型的变量,然后再进行强制类型转换,示例代码如下:
```
void* tmp = realloc(*pc->pbufout, newlen);
if (tmp == NULL) {
// 处理内存分配失败的情况
} else {
*pc->pbufout = (unsigned char*)tmp;
}
```
这样就可以避免编译器报错了。另外,建议开启-fpermissive选项,这样可以让编译器更容易地兼容旧代码,但也可能会导致一些潜在的问题。
相关问题
error: invalid conversion from ‘void*’ to ‘unsigned char*’ [-fpermissive] 279 | tmp = realloc(*pc->pbufout, newlen);
这个错误的原因是realloc函数返回的是void*类型,需要进行强制类型转换才能赋值给unsigned char*类型的变量。
这里提供一种解决方法,可以将realloc函数返回的指针先赋值给void*类型的变量,然后再进行强制类型转换:
```
void* tmp = realloc(*pc->pbufout, newlen);
if (tmp == NULL) {
// 处理内存分配失败的情况
} else {
*pc->pbufout = (unsigned char*)tmp;
}
```
这样就可以避免编译器报错了。另外,建议开启-fpermissive选项,这样可以让编译器更容易地兼容旧代码,但也可能会导致一些潜在的问题。
这样修改后会产生警告信息warning: unused variable ‘tmp’ [-Wunused-variable] 275 | unsigned char* tmp;
这个警告信息是因为你在代码中定义了变量`tmp`,但是没有在后面的代码中使用到它,因此编译器认为这个变量是无用的。
你可以通过在代码中使用这个变量来解决这个警告,例如可以将赋值语句和类型转换语句合并,并使用`tmp`变量来存储转换后的指针,示例代码如下:
```
void* tmp = realloc(*pc->pbufout, newlen);
if (tmp == NULL) {
// 处理内存分配失败的情况
} else {
tmp = (unsigned char*)tmp;
*pc->pbufout = tmp;
}
```
这样,就可以避免编译器发出警告信息了。另外,为了避免类似这种无用变量的警告,可以在编译时加上`-Wno-unused-variable`选项来禁止这种警告。