0

我有一个向量:

vector<stringstream*> ssv;
for (int i = 0; i < cIter; i++) {
    ssv.push_back(new std::stringstream);
}

如何放入向量 ssv 字符串的元素?

我尝试:

string s1 = "easfef" + '\n';
int i = 0;
*ssv[i] << s1 << '\n';

但它给了我一个空字符串:

string sdf = ssv[i]->str();

我该怎么做?

感谢您对“\ n”的帮助,但它仍然是向量的问题:如果我写:

std::string s1 = "qwerqwr\n";   // for example
int i = 0;
*ssv[i] << s1;

但是像以前一样给我一个空字符串

string sdf = ssv[i]->str();
4

3 回答 3

3

您的主要问题是如何初始化字符串:

"easfef" + '\n'

"easfef"衰减为 aconst char *'\n'提升为int值为 10 的 a(假设为 ASCII)。然后,将两者相加,从而产生一个指向字符串文字之外某处的指针。很可能发生车祸,你的母亲被恐龙吃掉。

解决此问题的一种简单方法是强制执行std::string

std::string s1 = std::string("easfef") + '\n';

一种更简单的方法是内联换行符:

std::string s1 = "easfef\n";
于 2013-01-12T09:19:39.740 回答
2

在您的代码中

string s1 = "easfef" + '\n';

初始化表达式实际上将计算为

"easfef" + 10;

它是指向字符串第十一个字符的指针。

但是没有这样的,所以你有Undefined behavior


使固定:

string s1 = string() + "easfef" + '\n';

也就是说,对于stringstream您要解决的任何问题,指针向量几乎肯定是不切实际的解决方案。

尝试描述更高层次的问题。

于 2013-01-12T09:20:16.277 回答
0

在 C++ 中,字符串文字是chars的原始数组,数组可以被视为指针,而像 '\n' 这样的字符文字可以被视为数字,因此"easfef" + '\n'被解释为指针算术运算。

你应该写:

string s1 = "easfef";
s1 += '\n';
于 2013-01-12T09:22:08.020 回答