g ++ char NULL错误

时间:2012-12-06 21:29:04

标签: c++ g++ type-conversion

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

#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”); 第二个错误是关于free(vs);

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

第一个错误是因为你的textRead()函数最有可能被声明:

const char *textRead(char *) 

不推荐将字符串“myfile.file”(类型为const char *)自动转换为char *。通过更改textRead以接受const char *来修复它。

第二个错误......再次,看看编译器告诉你的是什么:有些东西期待void *并且你传递的是const void *:在这种情况下,{{1需要一个free指针。您有一个void *,可以隐式转换为const char *。但const void *无法变为const void *

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

答案 1 :(得分:0)

你还没有发布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 *的原因没有任何理由。改变它,错误就会消失。

另外,我不明白为什么你在vs之前复制free,但也许你没有发布在这两行之间发生的事情。< / p>