我有一个向量的字符串对象:
我需要使用stringstream将其转换为char *并将char *存储在向量中。 是正确的方法吗?
//! strvector contain string objects and newcharvector needs to be populate.
for(int i =0 ; i < strvector.size(); i++)
{
std::string &obj = strvector[i];
std::stringstream ss;
char* str;
ss << obj;
ss >> str;
newcharvector.push_back(str);
}
答案 0 :(得分:3)
char*
是一个指向包含字符串的存储区的指针。
在您的示例中:此内存/字符串在哪里?
当然,stringstream
(不再使用,请使用istringstream
或ostringstream
)在内部存储字符串,您可以从中检索字符串,但是在{{ 1}}对象被删除,内部字符串被删除,并且您的stringstream
指针指向空闲/未使用的内存(该内存很可能由char*
变量的下一个实例重新使用)。 / p>
要在stringstream
中存储char*
,则必须浏览动态内存分配的仙境。还没有。
为什么不将vector
存储在std::string
中?
答案 1 :(得分:1)
不要使用原始指针!
#include <vector>
#include <string>
#include <iostream>
#include <memory>
int main()
{
std::vector<std::string> strvector{ "foo", "bar", "baz", "qux", "thud" };
std::vector<std::shared_ptr<char[]>> newcharvector;
for (auto const &s : strvector) {
newcharvector.push_back(std::shared_ptr<char[]>(new char[s.length() + 1]));
std::strcpy(newcharvector.back().get(), s.c_str());
}
for (auto const &s : newcharvector)
std::cout << s << '\n';
}
答案 2 :(得分:0)
这样做正确吗?
这是回旋处。最好使用c_str()
获取表示为char*
的字符串表示形式,然后使用strdup()
保留该字符串(如果有必要,因为c_str()
返回的指针无效)修改std::string
或超出范围后
std::vector<std::string> strvector{ "foo", "bar" };
std::vector<char*> pointers;
for (std::string &s : strvector) {
pointers.push_back(_strdup(s.c_str()));
}
for (char* p : pointers) {
printf("string: %s\n", p);
}