【问题标题】:why is char *s = (char*)tag.c_str(); is wrong when tag is a string为什么 char *s = (char*)tag.c_str();当标签是字符串时是错误的
【发布时间】:2021-03-16 04:45:21
【问题描述】:

我正在尝试这段代码,我发现它运行良好。但这是将字符串转换为 char* 的正确方法吗?

char* s1= "hello"; string s1 = (char*)s2.c_str();

这行是什么意思:将地址存储到临时字符串对象的内部存储是错误的。

【问题讨论】:

  • char* s1= "hello"; 也是错误的。在 C++ 中,所有文字字符串实际上都是 constant 字符数组(包括字符串空终止符)。你需要一个const char*(或char const*,完全相同)。
  • 另外,c_str 中的c 用于常量。该函数返回一个const char*
  • 哦,如果你觉得需要在 C++ 中使用 C 风格的转换(就像你使用 (char*)s2.c_str() 所做的那样),那么你应该把它当作你做错了什么的标志。跨度>
  • 是的。找到代码中神秘错误的最简单方法之一是寻找过于广泛的演员表。

标签: c++ string pointers char


【解决方案1】:

string 有一个复制构造函数。要将s2 复制到新的string s1,请执行string s1(s2);

【讨论】:

  • 或者更简单的string s1 = s2; 甚至可能是auto s1 = s2;
猜你喜欢
  • 2021-03-15
  • 2022-12-08
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 2012-03-06
  • 2010-12-14
相关资源
最近更新 更多