我无法使用指向char数组的指针获取我的字符串数据。你能帮我解释一下我做错了吗。
#include "stdafx.h"
#include <conio.h>
#include <string>
using namespace std;
string GetString()
{
return string("255");
}
int _tmain(int argc, _TCHAR* argv[])
{
char* str_p = const_cast<char*>(GetString().c_str());
printf("Pointer : %s\n", str_p);
string str;
str = str_p[0];
str += str_p[1];
str += str_p[2];
printf("Constructed : %s\n", str.c_str());
_getch();
return 0;
}
控制台输出是:
Pointer :
Constructed :
答案 0 :(得分:1)
这一行有很多问题:
char* str_p = const_cast<char*>(GetString().c_str());
GetString()
会返回一个临时string
。它在行尾被摧毁。所以你最终得到了一个悬挂指向已经解除分配的内部数据的指针。此外,如果您真的非常需要它,const_cast
是您应该只使用的东西 - 直接编辑数据只是在寻找麻烦。
如果你想要一个指向该字符串的指针,正确的做法是:
string old = GetString(); // make sure it doesn't go out of scope
const char* str_p = old.c_str(); // while this pointer is around