我正在尝试构建一个向量,并且向量中的每个char *应该是不同的。这是代码:

static char *StatsManager::_statsOption[4] = {"min", "max", "mean", "stddev"};

void BuildStatsNameList(long ChanIdx)
{
    for (int m = 0; m < 4; m++)
    {
        std::string statsName(StatsManager::_statsOption[m]);

        for (int n = 0; n < 1; n++)
        {
            statsName += "_";
            statsName += std::to_string(ChanIdx);
            statsName += "_";
            statsName += std::to_string(n);
            //sprintf (statsName, "s%_%d_%d", StatsManager::_statsOption[m],ChanIdx, n);
            StatsManager::_statsNameList.push_back((char*)statsName.c_str());
        }
    }
}


但是,我注意到char*中的statsNamestatsName)最终将变得相同。
例如,循环后,StatsManager::_statsNameList变为

stddev_1_0
stddev_1_0
stddev_1_0
stddev_1_0


......

相反,我想要它

min_1_0
max_1_0
mean_1_0
stddev_1_0


任何人都知道如何避免statsName一次又一次地被覆盖?谢谢。

最佳答案

如果要保留C样式的字符串,一种选择是使用strdup

   StatsManager::_statsNameList.push_back(strdup(statsName.c_str()));


但是请注意,使用完这些字符串后,您将需要自己free内存。

关于c++ - 建立char *的 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25775261/

10-11 19:41