如何使用指针返回字符串数据?

时间:2015-04-22 19:30:46

标签: c++ string pointers visual-c++

我无法使用指向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 :

1 个答案:

答案 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