相关疑难解决方法(0)

为什么这样做:从std :: string函数返回C字符串文字并调用c_str()

我们最近在大学里做了一个讲座,我们的教授告诉我们在使用不同语言编程时需要注意的不同事项.以下是C++中的一个示例:

std::string myFunction()
{
    return "it's me!!";
}

int main(int argc, const char * argv[])
{
    const char* tempString = myFunction().c_str();

    char myNewString[100] = "Who is it?? - ";
    strcat(myNewString, tempString);
    printf("The string: %s", myNewString);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会失败的原因是return "it's me!!"使用char []隐式调用std :: string构造函数.该字符串从函数c_str()返回,函数返回指向数据的指针std::string.

由于函数返回的字符串未在任何地方引用,因此应立即取消分配.这就是理论.

但是,让这段代码运行没有问题.很想知道你的想法.谢谢!

c++

43
推荐指数
2
解决办法
4528
查看次数

在成员变量中存储 std::to_string(x).c_str() 会产生垃圾

我有一个非常简单的 C++ 程序:

using namespace std;

class TheClass
{
private:
    const char *_numberString;

public:
    TheClass(int number)
    {
        _numberString = to_string(number).c_str();
    }

    operator const char *()
    {
        return _numberString;
    }
};

int main(int argc, const char * argv[])
{
   TheClass instance = 123;
   cout << (const char *)instance << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在 Xcode 中运行它时,它会记录\367\277_\377. 如果我把它改成这样:

using namespace std;

class TheClass
{
public:   // Change 1/2
    const char *_numberString;

public:
    TheClass(int number)
    {
        _numberString = to_string(number).c_str();
    }

    operator …
Run Code Online (Sandbox Code Playgroud)

c++ xcode

0
推荐指数
1
解决办法
2163
查看次数

标签 统计

c++ ×2

xcode ×1