【问题标题】:how to pass a parameter to char*?如何将参数传递给 char*?
【发布时间】:2020-10-09 01:58:30
【问题描述】:

如下面的代码,无法传递这个参数,如何解决?

E0167 “const char *”类型参数与“char *”类型参数不兼容

代码示例:

#include <iostream>
using namespace std;

int PrintString(char* s)
{
    cout << s << endl;
}

int main(int argc, char* argv[])
{
    PrintString("TESTEEEE");
    return 0;
}

我已经尝试过PrintString(L"TESTEEEE");

我也尝试设置 Project -> Properties -> General -> Character Set 选项以使用多字节字符集。

【问题讨论】:

  • 正如它所说,“TESTSEEE”是一个 const char *。将int PrintString(char* s) 更改为int PrintString(const char* s)
  • 我已经尝试过 PrintString(L"TESTEEEE"); 对于你想要的宽字符文字 int PrintString(const wchar_t* s)
  • 要么更改函数 proto,要么将参数 const_cast 为 char *。请记住,修改文字是 UB。
  • 为什么不能编辑函数使其第一个参数const wchar_t* s
  • 这能回答你的问题吗? Difference between char* and const char*?

标签: c++ string


【解决方案1】:

这个字面量"TESTEEEE" 的类型是char const[9]。当用作函数的参数时,它可以衰减到char const*,但不能衰减到char*。因此,要使用您的函数,您必须使参数适合您的参数或相反,如下所示

#include <iostream>

using namespace std;
int PrintString(const char* s)
{
    cout << s << endl;
}


int main(int argc, char* argv[])
{

    PrintString("TESTEEEE");

    return 0;
}

live

#include <iostream>

using namespace std;
int PrintString( char* s)
{
    cout << s << endl;
}


int main(int argc, char* argv[])
{
    char myArr[] = "TESTEEEE";
    PrintString(myArr);

    return 0;
}

live

【讨论】:

    【解决方案2】:

    你的常量不正确,应该是:

    void PrintString(const char* s)
    

    【讨论】:

    • 补充背景信息:String Literal 文字不一定存储在可写内存中,因此为防止意外写入,将它们标记为const
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多