我收到从 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 错误的无效转换。如何修复这个程序?的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 [-Wnarrowing] 中缩小从“int”到“char”的“199”转换

无法从 'char[]' 转换为 'string[]' [关闭]

奇怪的错误,错误:从‘const char*’到‘char’的无效转换[-fpermissive]

不存在从 std 字符串到 const char * 的合适转换函数

无法将char转换为int?

为啥在尝试“cat”我的 char 设备驱动程序时收到错误消息?