永发信息网

error: invalid conversion from const char* to char*

答案:2  悬赏:70  手机版
解决时间 2021-04-13 19:01
error: invalid conversion from const char* to char*
最佳答案
直接看报错的地方,因为buffer是char *类型的,而a.c_str()返回的是const char *类型,buffer=a.c_str()这个赋值操作编译报错。
这里你应该是想判断buffer里面的内容是不是和a里面的内容相等吧
你这里把=号当==用了,C/C++里面判断两个值是否相等的运算符是==,而
=是赋值符。C里面,比较两个字符串是否相等,应该使用strcmp函数,直接比较
的话其实是比较两个指针是否相等了。你这程序还有其它问题,帮你都改了:

string a;//a里面存的a=1这个字符串FILE *fp=fopen(filepath.c_str(),"r");
//char*buffer={0};//就是个缓冲区,你这定义的是个指针,并且指向0,是个空指针,往里面写数据会报错
//修改为数组
char buffer[101] = {0};
while(fgets(buffer,100,fp)!=NULL)
{
//比较两个字符串内容是否相等,要用strcmp函数
if(0 == strcmp(buffer, a.c_str()))
return
else
{
//把缓冲区清空
memset(buffer,0,101);
continue;
}

//或者,也可以使用C++的string类:
string strTmp(buffer);//使用string的构造函数给strTmp赋值为buffer里面的内容
if(strTmp==a)//string类重载了==运算符,可以直接比较两个字符串是否相等
return;
else
{
//把缓冲区清空
memset(buffer,0,101);
continue;
}

}追问我现在是要解决这样的问题:如果有字符串相等的话就不执行下面的编译操作(下面有个编译的函数)。如果这个文件中没有和macroname相等的字符串,就执行下面的编译函数(compile)该如何写?追答你要分清两个概念,编译期和运行期
编译期结束,所有的代码都已经编译完成,运行的时候,是不会再编译程序的。
至于你说的问题,如果两个字符串在编译期就已经知道,可以通过宏定义的方法来决定需要编译的内容,很多跨平台的软件就是通过这种方法来适应不同的操作系统的。如果在编译期这两个字符串不定,是实现不了你的说的功能的。C/C++是需要编译连接再运行的语言,而不是解释型的语言,边解释边运行。追问那就是我没说清楚,是这样的!
先判断该文件中是否有和字符串a相等的字符串,如果有的话就不执行下面的一个函数,这个函数的功能你不用管,如果没有就执行下面的函数,追答你刚才那个函数差不多就可以实现了。
比如你写一个判断文件中是否有和a相等的字符串的函数:
int CheckIfExist(string a)
{
char buffer[101] = {0};
while(fgets(buffer,100,fp)!=NULL)
{
//比较两个字符串内容是否相等,要用strcmp函数
if(0 == strcmp(buffer, a.c_str()))
{
return 1;//如果找到相等的,返回1
}
else
{
//把缓冲区清空
memset(buffer,0,101);
continue;
}

//读完文件,没有找到相等的,返回0
return 0;
}

然后,在你需要判断是否要执行某个函数的地方写:
if(!CheckIfExist(a))
{
//执行你的函数
}追问error: return-statement with a value, in function returning 'void'
./src/MakFile.cpp:652: error: return-statement with a value, in function returning 'void'
return 0;
和return 1;会报错。追答我前面声明了函数:
int CheckIfExist(string a)
这个函数是有int返回值的,你写成void了吧。。。追问int CheckIfExist(string b);

int CheckIfExist(string a)
{
char buffer[101] = {0};
while(fgets(buffer,100,fp)!=NULL)
{
if(0 == strcmp(buffer, a.c_str()))
{
return 1;
}
else
{
memset(buffer,0,101);
continue;
}
return 0;
}
if(!CheckIfExist(a))
{

}
我是这样写的?追答这段代码本身没有问题,我不知道你其它代码怎么写的。
全部回答
不能从常量型的char*转换成变量型的char*追问这里面哪有常量型的char啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电脑漏洞太多来的太频繁
德清新安金忠家电地址在哪,我要去那里办事
乔丹科比谁厉害?
为什么大部分intel的cpu都没有三级缓存,而大
他很愿意开车送你回家。英语怎样翻译?
Impossible与too连用作什么意思
寻找成吉思汗游戏等级在32级以上的游戏截图?
I picked out a baby bird without any feath
检具基准孔坐标值,z方向怎么定
描写乌鸦的优美的句子,描写乌鸦的句子
凤尾竹大酒店怎么去啊,有知道地址的么
明星电器商行地址在什么地方,想过去办事,
什么减肥贴效果好
山东郓城有玩DNF的吗?
Nero怎么用?
推荐资讯
为什么从一开始说女孩子都喜欢他,交往时间长
解放区焦作乐万家整体橱柜衣柜我想知道这个在
我男人姓李、我姓乐、预产期11月5日'那
悦诗风吟怎么使用
且听风吟谁告诉我下?
“宣父犹能畏后生,丈夫未可轻年少”这句诗是
毕业创作指导教师评语,导师对答辩后论文修改
单选题唐朝的统治者对道教特别推崇,曾亲自为
哦买噶..问下体温。
穿越清吧怎么去啊,有知道地址的么
南京太平南路,一百零二号?离火车站远不?怎
利仁冷风机通风器在什么地方啊,我要过去处理
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?