如何使用指针获取字符串数据

How to get string data back using pointer?

本文关键字:字符串 数据 获取 指针 何使用      更新时间:2023-10-16

我无法使用指向 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 : %sn", str_p);
    string str;
    str = str_p[0];
    str += str_p[1];
    str += str_p[2];
    printf("Constructed : %sn", str.c_str());
    _getch();
    return 0;
}

控制台输出为:

Pointer :
Constructed :

这行有很多错误:

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