我尝试使用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);
我的代码出了什么问题?
答案 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>