我收到从 char 到 const char 错误的无效转换。如何修复这个程序?
Posted
技术标签:
【中文标题】我收到从 char 到 const char 错误的无效转换。如何修复这个程序?【英文标题】:I'm getting invalid conversion from char to const char error.How to fix this program? 【发布时间】:2017-07-01 13:16:22 【问题描述】:我在几行中就收到了这个错误,不知道这个程序是如何工作的。初级程序员在这里。任何帮助将不胜感激。
#include <iostream>
#include <cstring>
using namespace std;
char* find_greater(char* a, char b)
char* result;
if (strcmp(a, b) > 0)
result = a;
else
result = b;
return result;
int main()
char str1[10], str2[10];
str1[] = "zebra";
str2[] = "man";
cout << "Greater string is :" << find_greater(str1, str2) << endl;
return 0;
【问题讨论】:
不要垃圾标签! C 不是 C++ 不是 C! 一个不知从何而来的else
??您的代码有更多问题。
你似乎对C++有不少误解。你应该退后一步,从一本好书中系统地学习语言。
抱歉,有些人在复制粘贴时遗漏了 if 语句。实际上我只是在使用 C 一周后学习 C++。一开始应该听取建议并学习一种更简单的语言(也许是 python?)哈哈
不要在 C++ 中对字符串使用 char 数组。使用标准::字符串。如果你遵循“拳头 C 胜于 C++”的学习风格:不要这样做!
【参考方案1】:
Two problems.
一个愚蠢的错字:
char* find_greater(char* a, char* b)
// ^
更多地关注你在做什么,并阅读你的代码。
在这里解析错误:
char str1[10], str2[10];
str1[] = "zebra";
str2[] = "man";
您不能将字符串文字分配给这样的数组,即使可以,str1[]
也不是一回事。作为一种特殊情况,您可以像这样初始化(仅),这样做:
char str1[10] = "zebra", str2[10] = "man";
解决这些问题,the code compiles and runs(尽管正如其他答案所探讨的那样,这确实不是最好的方法)。
【讨论】:
【参考方案2】:看,应该是这样的
你忘记了函数参数中的*
,它应该是char* b
#include<iostream>
#include<cstring>
char* find_greater(char* a, char* b)
if (strlen(a) > strlen(b)) //check length array
return a; // return array
return b;
int main()
char str1[] = "zebra";
char str2[] = "man";
std::cout << "Greater string is :" << find_greater(str1, str2) << endl;
return 0;
您之前添加到标签的 C++ 中的第二种可能性
#include<iostream>
#include <vector>
std::vector<char> find_greater(std::vector<char> a, std::vector<char> b)
if (a.size() > b.size())
return a;
return b;
int main()
std::vector<char> vec1 'w','w','w','w','w','w','w','w' ;
std::vector<char> vec2 'w','w' ;
std::cout << "Greater string is :";
for (const auto& itr : find_greater(vec1, vec2))
std::cout << itr;
std::cout << std::endl;
return 0;
第三个解决方案(在 c++ 中可能是最好的)
#include <iostream>
#include <string>
std::string find_greater(const std::string& a, const std::string& b)
if (a.size() > b.size())
return a;
return b;
int main()
std::string str1 "Monkey" ;
std::string str2 "Horse" ;
std::cout << "Greater string is : " << find_greater(str1, str2) << std::endl;
return 0;
【讨论】:
第二种和第三种解决方案实现了不同的语义:它们比较的是字符串长度,而不是字符串内容。 但是 OP 的问题是什么?你不说。 @chqrlie 是的,但我添加了该解决方案,显示其他可能性以上是关于我收到从 char 到 const char 错误的无效转换。如何修复这个程序?的主要内容,如果未能解决你的问题,请参考以下文章
不存在从 std 字符串到 const char * 的合适转换函数
从'const char *'到'char *'的无效转换[-fpermissive]; VTK-7.1.1编译错误
错误 C2440:“=”:无法从“const char *”转换为“char *”