我有一个cons char *的向量。这实际上是一个时间戳。每次,我都获取最后一个值,将其转换为整数,然后增加40。然后将其作为const char *返回到vector。我的问题是,新值未获取push_back()。向量已经包含一些值。
我尝试创建实例,而不是像 代替这个
string is = to_string(y);
some_vector.push_back(is.c_str());
我在做
string is = to_string(y);
const char * temp = is.c_str();
some_vector.push_back(temp);
我的完整代码是
vector<const char *> TimeConstraint;
for (int i = 1; i <= 10; i++)
{
const char * tx = TimeConstraint.back();
int y;
stringstream strval;
strval << tx;
strval >> y;
y = y + 40;
string is = to_string(y);
const char* temp_pointer = is.c_str();
TimeConstraint.push_back(temp_pointer);
}
新值未添加到TimeConstraint向量中
每次我都要push_back()向量的最后一个元素的增量值。请帮助我 预先感谢
答案 0 :(得分:6)
此:
string is = to_string(y);
const char* temp_pointer = is.c_str();
TimeConstraint.push_back(temp_pointer);
很麻烦。
is.c_str()
返回的指针仅在is
有效时有效,直到下一次循环迭代。
我建议您将TimeConstraint
更改为保留std::string
个对象,然后执行以下操作:
TimeConstraint.push_back(is);
然后您的容器会根据需要使字符串保持活动状态。
另一个问题是
const char * tx = TimeConstraint.back();
由于在空的.back()
上调用std::vector
是无效的。该代码会导致未定义的行为,并使您的程序变得毫无意义。编译器没有义务再做任何明智的事情。