【问题标题】:char* versus const char* (Again!!!) [duplicate]char* 与 const char* (再次!!!)[重复]
【发布时间】:2020-09-04 02:51:33
【问题描述】:

我能找到的每个参考资料都表明我可以使用 char* cName = "Some Text",但我的 VS2019 抱怨。

我在 Stackoverflow 上看到了许多使用该语法的示例,并且许多 youtube 视频也展示了它的用法。

谁能解释为什么我看到我的错误(见下图)

【问题讨论】:

  • 我能找到的每个参考资料都表明我可以使用char* cName = "Some Text"。真的吗?哪个?也许,你应该更好地向一些good C++ books学习。
  • 在旧版本的 C++ 中是可能的,但现在已被弃用。如果您的参考资料表明它是有效的,那么它很可能已经过时了。
  • fwiw youtube 视频不是最可靠的来源,甚至不应盲目相信 Stackoverflow 的答案。还要考虑到 C++ 正在发展,所以现在可以做的事情可能不适用于下一个标准
  • @dreamlax -- 它不只是被弃用;它消失了。 Deprecated 表示可以,但可能不会出现在标准的未来版本中。
  • @PeteBecker 是的,这是一个糟糕的单词选择,我记得当时我在想“它不久前已被弃用”这句话,但显然我的手输入了其他内容!

标签: c++ visual-studio compiler-errors char constants


【解决方案1】:

从 C++11 开始你不能这样做。 c-style string literal 的类型是 const char[]const char 的数组),可以衰减到 const char*(指向 const char 的指针),但不能衰减到 char*(指向非 const char 的指针)。

在 C 中,字符串文字的类型为 char[],并且可以直接分配给(非常量)char*。 C++03 也允许它(但不推荐使用它,因为 C++ 中的文字是 const)。 C++11 不再允许在没有强制转换的情况下进行此类赋值。

【讨论】:

    【解决方案2】:

    由于 char* 是指向 char 的指针,典型的做法是分配一块内存,然后将指针指向你创建的内存。

    例如:在 C 和 C++ 中你可以使用

    char* example = (char *)malloc(sizeof(char) * 5); //#include<stdlib.h> required
    strcpy(example, "CGTS"); // #include<string.h> required
    
    free(example); //call this after all usage of example 
    
    

    在 C++ 中,你可以使用 new 代替 malloc,你也可以看看 C++ 中的 std::string,它可能对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多