gpt4 book ai didi

c++ - 从 C++ stringstream ostringstream 获取 char* 数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:13 25 4
gpt4 key购买 nike

我正在尝试将 ostringstream 复制到 char* 数组,希望有人能帮助我理解我的错误所在。我查看了论坛,发现了一些相似的东西,不幸的是我仍然无法将属性从 ostringstream 复制到 char*。简而言之,我试图通过以下方式复制到 char* 中:

ostringstream bld
bld<<"test"<<"is"<<"good"
const char * result = bld.str().c_str();

重现错误的完整代码如下。在这段代码中,我有两个主要通过 ostringstream 构建字符串的函数。在ma​​keFilePath() 函数中,我构建了一个完整的文件路径(即/path/file.txt)。在 add() 函数中,我只是将另外两个 char* 数组添加到一个参数中以获取 prefix/path/file.txt suffix

问题是出于某些未知原因,fullFilePath 也更改为看起来像prefix/path/file.txt suffix。代码的最后三行将展示这一点。

我在这上面花了几个小时,想着这可能是一个引用问题或其他问题。但是,我尝试过的都没有用。任何想法如何解决这个问题?

谢谢!!

#include <iostream>
#include <sstream>
#include <string>

using std::cout;
using std::endl;
using std::string;

using std::ostringstream;

const char* add(const char *fileName) {
ostringstream bld;
const char *prefix = "prefix";
const char *suffix = "suffix";
bld << prefix << " " << fileName << " " << suffix;
string temp = bld.str();
cout << "in add(): \n\t" << temp << endl;
return temp.c_str();
}

const char * makeFilePath(const char *path, const char *name, const char *ext =
".txt") {
ostringstream bld;
bld << path << name << ext;
cout << "makeFilePath(), returning: \n\t" << bld.str()<< endl;
string temp = bld.str();
return temp.c_str();

}

int main(int argc, char **argv) {
cout << "=== PROJECT START ===" << endl;

const char * filePath = "\\Path\\";
const char *fileName = "FILENAME";
const char *fullFilePath = makeFilePath(filePath, fileName);

cout << fullFilePath before calling add():\n\t" << fullFilePath << endl;
const char* str = add(fullFilePath);
cout << fullFilePath after calling add():\n\t" << fullFilePath << endl;

return 1;
}

最佳答案

简短的回答是你需要使用像 strdup 这样的东西来解决这个问题:

const char* makeFilePath(const char *path, const char *name, const char *ext = ".txt")
{
ostringstream bld;
bld << path << name << ext;
cout << "makeFilePath(), returning: \n\t" << bld.str()<< endl;

return strdup(bld.str().c_str());
}

这是一个真正次优的解决方案,因为现在你有内存泄漏,除非你正确地 free 这个函数的结果,而且它有时可能会返回 NULL如果您不对其进行测试,可能会导致困惑。返回 std::string 会好得多。

如果您使用的是 C++,请使用 C++。

关于c++ - 从 C++ stringstream ostringstream 获取 char* 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com