const char *向量的新值未获取push_back()

时间:2019-04-19 07:30:57

标签: c++

我有一个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()向量的最后一个元素的增量值。请帮助我 预先感谢

1 个答案:

答案 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是无效的。该代码会导致未定义的行为,并使您的程序变得毫无意义。编译器没有义务再做任何明智的事情。