-7

我尝试使用 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"); 第二个错误是关于免费(vs);

我的代码有什么问题?

4

2 回答 2

1

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

const char *textRead(char *) 

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

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

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

于 2012-12-06T21:48:11.813 回答
0

你还没有发布textRead函数的样子,所以我假设它的签名如下:

void *textRead( char *filename );

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

void *textRead( char const *filename );

如果您无法修改该功能,请将您的代码更改为

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

about 的错误消息free非常不言自明,free需要 avoid *并且您正在向它传递一个const指针。我看不出有什么理由vs需要 aconst char *而不是 a char *。改变它,错误就会消失。

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

于 2012-12-06T21:51:58.583 回答