error: invalid conversion from const char* to char*
答案:2 悬赏:70 手机版
解决时间 2021-04-13 19:01
- 提问者网友:皆是孤独
- 2021-04-13 15:24
error: invalid conversion from const char* to char*
最佳答案
- 五星知识达人网友:蓝房子
- 2021-04-13 15:47
直接看报错的地方,因为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))
{
}
我是这样写的?追答这段代码本身没有问题,我不知道你其它代码怎么写的。
这里你应该是想判断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))
{
}
我是这样写的?追答这段代码本身没有问题,我不知道你其它代码怎么写的。
全部回答
- 1楼网友:十鸦
- 2021-04-13 16:27
不能从常量型的char*转换成变量型的char*追问这里面哪有常量型的char啊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯