g++ 字符空错误
g++ char NULL error
我尝试使用 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
,但也许你还没有发布发生在这两行之间的东西。
- 我的字符计数代码计算错误.为什么
- 错误:字符数组的初始值设定项太多
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 在函数 strcpy() 中访问字符数组时出现分段错误
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 为什么我的代码在尝试复制字符数组时引发 C6386 错误?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- C++ 字符错误
- 增量生成 - 错误:字符串的第一个字符应'0'或'1'
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- C++错误字符分配
- C 字符串对象错误字符
- 奇怪的错误字符加密 (ASCII)
- 将 XOR 加密错误字符转换为 int 会失去精度
- 错误:字符数组的初始化器字符串太长c++
- 文件输出中存在错误字符
- 我使用 POCO 解析 JSON.它抛出一个异常:JSON 异常:错误字符.如何处理汉字
- 返回错误字符的c++数组
- c++凯撒密码程序执行错误字符