【问题标题】:Is possible to convert argument from 'const char []' to 'char *' in C++?是否可以在 C++ 中将参数从“const char []”转换为“char *”?
【发布时间】:2018-09-21 11:12:49
【问题描述】:

方法的定义是:

void setArgument(char *);

我用这段代码调用该方法:

setArgument("argument");

但是我的 VisualStudio 编译器给我下一个错误:

无法将参数 1 从 'const char [10]' 转换为 'char *'

是否可以发送这样的参数,或者我必须更改方法中的参数类型? 此外,VS 在输出中显示下一个注释:注意:从字符串文字转换丢失 const 限定符(参见 /Zc:strictStrings)

【问题讨论】:

    标签: c++ char


    【解决方案1】:

    问题在于字符串字面量是常量个字符的数组。

    虽然数组可以很容易地衰减为指向其第一个元素的指针,但该指针的类型是const char *。这需要是您的函数的参数类型。

    如果你需要修改你传递的字符串,那么你应该创建自己的非常量数组:

    char argument[] = "argument";
    setArgument(argument);
    

    当然,既然您使用 C++ 进行编程,您应该停止使用 char 指针和数组,而改用 std::string

    【讨论】:

      【解决方案2】:

      这是可能的,只是如果你真的需要参数是可变的(char* 而不是char const*),你需要在可变内存中分配一个新的存储空间并将常量内存的内容克隆到那里,如果这符合您对“转换”的定义。

      auto const len = strlen(input);
      auto const buf = std::unique_ptr<char[]>(new char[len + 1]);
      memcpy(buf, input, len + 1);
      

      如果您确实需要char const*,并且如果您是C++17 或更高版本,您可以将签名更改为setArgument(std::string_view arg),使其防误用。

      【讨论】:

      • @Yksisarvinen 哎呀...最近java太多了,已修复
      猜你喜欢
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2013-12-31
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多