【发布时间】:2018-08-11 06:11:24
【问题描述】:
我有一个问题,我需要一个 const char* 向量,但由于某种原因,每当我尝试添加一些东西时,什么都没有发生。这是有问题的代码示例。
std::vector<const char*> getArgsFromFile(char* arg) {
std::ifstream argsFile(arg);
std::vector<const char*> args;
while (!argsFile.eof()) {
std::string temp;
argsFile >> temp;
args.push_back(temp.c_str());
}
args.pop_back();
return args;
}
奇怪的是,如果我做出这个改变
std::vector<const char*> getArgsFromFile(char* arg) {
std::ifstream argsFile(arg);
std::vector<const char*> args;
while (!argsFile.eof()) {
std::string temp;
argsFile >> temp;
const char* x = "x";
args.push_back(x);
}
args.pop_back();
return args;
}
它会将“x”添加到向量中,但我无法将 temp 的值添加到向量中。有什么想法吗?帮助将不胜感激。谢谢!
【问题讨论】:
-
temp超出范围时,c_str的返回值超出范围。x正在工作,因为它卡在二进制文件的只读存储中,因此它永远不会消失。 -
你不需要一个 char * 的向量,你需要一个 std::string 的向量。此外,您对 eof() 的使用是错误的 - 请参阅 stackoverflow.com/questions/5605125/…
-
我需要一个 char* 的向量,它是我作业的一部分,我们不能使用字符串向量
-
然后您需要调用
new char[size],复制字符串,将字符数组添加到向量中,并确保在程序结束时分配的所有内容上调用delete []。 -
@MillieSmith: "并确保在分配的所有内容上调用
delete []" - 如果您必须使用new char[]而不是std::string,那么您应该使用std::vector<std::unique_ptr<char[]>>而不是std::vector<char*>,并在vector被清除/销毁时让std::unique_ptr为您处理释放。
标签: c++ string vector char c-strings