【发布时间】:2014-09-10 21:18:24
【问题描述】:
我正在尝试构建一个向量,据说向量中的每个 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());
}
}
}
但是,我注意到 statsName 中的 char* (statsName ) 最终会变得相同。
例如在循环之后,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 一次又一次地被覆盖吗?谢谢。
【问题讨论】:
-
为什么是
char*而不是std::string? -
您有未定义的行为,因为您存储的指针会在您离开函数后立即失效。为什么不直接将字符串存储在向量中?
-
对面的接口是char*。
-
@Ono
The interface from the other side is char*你知道 std::string 有一个c_str()成员函数,对吧?没有任何理由仅仅因为其他地方的实体使用 char* 就编写此代码。