cpp如何只获取c_str()的值

cpp-how to get only the value of c_str()

本文关键字:str 的值 获取 cpp      更新时间:2023-10-16

我有一个返回const char*的函数。在这个函数中,我有以下参数:

string str;

为了将str转换为const char*,我使用str.c_str()

当我调试时,我注意到str.c_str()在字符串值之前包含一些内容(我猜是它的地址)。例如:如果str="0"I str.c_str() wiil 0x68d5f9"0"。为什么?如何只获取字符串的值?

不是问题,这就是指针的工作方式。

指针指向某个内存地址中包含的数据,调试器显示此指针指向地址0x<something>,此地址的值为'0'。这里没什么奇怪的。

当您打印这个从str.c_str()得到的值时,您将得到一个普通的C字符串。

cout << str.c_str();

这将为您提供与cout << str;相同的

c_str返回的字符串中,您不会得到指针所指向的地址。它是一个调试器工件,旨在让程序员检查地址和值。

但是,如果对函数范围的字符串进行调用,则返回c_str的结果可能是未定义的行为。

例如,这是非法的:

const char *illegal_return() {
    string s = "quick brown fox";
    return s.c_str(); // <<== Return of c_str from a local string
}

最好的解决方案是返回一个string。如果您想返回char指针,则需要制作一个副本:

char *legal_return() {
    string s = "quick brown fox";
    const char *ptr = s.c_str();
    size_t len = strlen(ptr);
    char *res = new char[len+1];
    strcpy(res, ptr);
    return res;
}

上述函数的调用方必须对结果调用delete[],以避免内存泄漏。