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*的转换是非标准的,其结果未定义?
只要您在修改字符串后不修改值或从中读取值,就可以使用强制转换(但您应该至少得到一个警告).
问题是你在临时函数上调用该函数(临时函数是string返回的cat()).之后;,临时超出范围val仍然指向由temp管理的内存.这是UB从中读取的.
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |