【问题标题】:Converting from std::string to char * in C++在 C++ 中从 std::string 转换为 char *
【发布时间】:2012-12-11 04:26:06
【问题描述】:

我正在使用 VS2012/C++,我需要将 std::string 转换为 char *,但我在网上找不到任何材料来指导如何去做。

任何代码示例和建议将不胜感激。

【问题讨论】:

  • @Mysticial:好吧,严格来说应该是const char*,不是吗?但我猜这可能已经足够好了。

标签: c++ visual-studio-2010 type-conversion


【解决方案1】:

使用

std::string bla("bla");
char* blaptr = &bla[0];

这保证从 C++11 开始就可以工作,并且在 C++11 之前的所有流行实现上都有效。

如果您只需要const char*,您可以使用std::string::c_str()std::string::data()

【讨论】:

  • 我知道 C++11 要求字节是连续的。但是我看不到 &bla[0] 指向的字符串的任何要求为零终止。这对用户来说可能重要也可能不重要。
  • @user515430:需求就在那里,只是隐藏得很好。见this question
  • @Mankarse 鉴于 cmets 来回的数量,没有一个来自委员会成员,我不是 100% 相信的。但是为什么要使用 &bla[0] 而不是 c_str() 呢?使用指针 &bla[0] 修改 std::string 实在是太丑了。
  • 我使用了答案中描述的方法,它在函数中运行良好,但是我在不同的函数中使用它(几乎完全相同),我得到的输出相当奇怪。我得到的输出是¡║½½½½½½½½½½½½½½EL)¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■¯■B¶↑h4ë¡║
  • 将 char* 传递给另一个函数的函数是 for (p = strtok( buffer, "~" ); p; p = strtok( NULL, "~" )) { string jobR(p); char* job = &jobR[0]; parseJobParameters(job); },而实际显示输出的函数是 int parseJobParameters(char * buffer) { // Parse raw data, should return individual job parameters const char* p; int rows = 0; for (p = strtok( buffer, "|" ); p; p = strtok( NULL, "|" )) { cout<<p; } return (1); }
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2017-03-10
  • 2010-11-14
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多