g++ 字符空错误

g++ char NULL error

本文关键字:错误 字符 g++      更新时间:2023-10-16

我尝试使用 gcc 版本 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC) 进行编译输入文件有一个常量字符:

#include <stdio.h>
#include <stdlib.h>
#include "textfile.h"
...
const char * vs=NULL;
vs = textRead("myfile.file");
const char * vv = vs;
free(vs);

此字符变量用于主 cpp 程序,并将用文本填充。

我在标题中使用一个函数textRead从myfile.file加载数据

得到了这个错误(我认为是演员转换),但不知道我在哪里犯了错误。

warning: deprecated conversion from string constant to ‘char*’
error: invalid conversion from ‘const void*’ to ‘void*’

第一个警告是关于 vs = textRead("myfile.file");第二个错误是关于免费(vs);

我的代码有什么问题?

第一个错误是因为您的 textRead() 函数很可能是这样声明的:

const char *textRead(char *) 

推荐使用将字符串"myfile.file"(类型为 const char *)转换为自动char *。通过将文本读取更改为接受const char *来修复它。

第二个错误...好吧,再一次,看看编译器告诉你什么:有些东西期待一个void *,你正在传递它一个const void *:在这种情况下,free需要一个void *指针。您有一个可以隐式转换为const void *const char *。但是const void *不能变成void *.

通过正确返回正确使用const来修复它。

您尚未发布textRead函数的外观,因此我假设其签名如下:

void *textRead( char *filename );

textRead获取要读取的文件的名称,它不需要(不应该)修改传递给它的字符串,因此textRead更改为

void *textRead( char const *filename );

如果无法修改函数,请将代码更改为

char filename[] = "myfile.file";
vs = textRead( filename );

关于free的错误消息是不言自明的,free期望一个void *,而你却向它传递了一个const指针。我看不出vs有任何理由需要成为const char *而不是char *.更改它,错误将消失。

另外,我不明白你为什么要在free之前复制vs,但也许你还没有发布发生在这两行之间的东西。