为什么它不能将 char\* 转换为 char

新手上路,请多包涵

在 C++ 中,我们可以写

1 char *s="hello"

但是下面的程序行会产生错误(无法将 char* 转换为 char)

2 char *s; *s="hello";

我在这里很困惑,1和2有什么区别,为什么会出现这个错误?

原文由 vishal rana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 958
2 个回答

字符串是一个字符数组。因此,字符串的 开头const char * 。因此要引用一个字符串,你可以使用 const char * s = "hello";

但是,如果您取消引用 const char* ,您会得到 const char 。这不是一个字符串,即 *s 给你’h’。

在您的代码 *s="hello"; 中,您说的是“在取消引用的 s 处分配值“你好””。取消引用 s 只是一个字符,您试图为其分配一个字符串。

原文由 Slate 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 C++ 中,字符串文字是一个 常量 字符数组,而不仅仅是像 C 中的字符数组。无论如何,要分配给这样的变量(最好避免),您不必取消引用指针。取消引用它会访问第一个元素,它只是一个字符。 char 不能在其中保存字符数组,从而导致错误。这更多是您应该使用 std::string 的原因。

一些编译器(例如 GCC)提供了扩展以使此类代码成为可能,因为它不是符合标准的代码,它看起来像:

 char* s = "hello";
s = "new string";

这会在 GCC 中生成以下警告(但仍会得到预期的结果):

警告:ISO C++ 禁止将字符串常量转换为 ‘char*’ [-Wwrite-strings]

Clang 也具有相同输出的相同行为(也会生成警告)

原文由 Arnav Borborah 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题