从const char*转换为char*修改VC++中的数据

isE*_*pty 2 c++ g++ visual-c++

在VC++中,当我将to const char*返回的值进行类型转换并打印出来的值时,屏幕上不会打印任何内容.这是代码片段std::string::c_str()char*

#include "stdafx.h"
#include <string>

using namespace std;

string test() { return(string("HELLO"));}


int _tmain(int argc, _TCHAR* argv[])
{
  char* val;
  val = (char*) test().c_str();
  printf("\n %s\n", val);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我只检查ASCII值时val[0]它是0.但是在G ++下,文本HELLO会显示出来.

从const char*到char*的转换是非标准的,其结果未定义?

Luc*_*ore 7

只要您在修改字符串后不修改值或从中读取值,就可以使用强制转换(但您应该至少得到一个警告).

问题是你在临时函数上调用该函数(临时函数是string返回的cat()).之后;,临时超出范围val仍然指向由temp管理的内存.这是UB从中读取的.

  • 只要您不修改该值,我就不会说.在字符串对象上调用非const函数也会使它失效,虽然这在这里是不可能的,但知道你可以使用该指针的时间很重要.只是我觉得值得一提的东西. (2认同)