1

在这段代码中,我得到了一个输出

bbb 55 66 77 88
aaa

我期望和想要的输出是

bbb 55 66 77 88
bbb

因为我sslog[0]to重新分配log[1]。所以我的问题是为什么输出与我期望的不同,我如何将其更改为我想要的?

      int w,x,y,z;
      stringstream ss (stringstream::in | stringstream::out);
      string word;
      string log[2];
      log[0]="aaa 11 22 33 44";
      log[1]="bbb 55 66 77 88";

      ss<<log[0];
      ss>>word;

      int k=0;
      ss>>w>>x>>y>>z;
      k++;

      ss<<log[k];
      cout<<log[k]<<endl;
      ss>>word;
      cout<<word<<endl;
      return 0;
4

2 回答 2

1

什么时候

ss >> w >> x >> y >> z;

被执行后,没有内容可操作,ss.good() 返回 false,表示需要调用 ss.clear() 以确保一切正常,我们可以继续。

但是,鉴于您这样做

ss.clear();
ss<<log[k];

ss 的内容将是

aaa 11 22 33 44bbb 55 66 77 88

如果你想这样,很好。但也许你期望它包含

bbb 55 66 77 88

这是由

ss.str(log[k]);
ss.clear();
于 2010-05-16T06:34:40.720 回答
0

当您第二次写入字符串流时,输入指针 (tellg) 设置为 -1 并设置了失败位。这意味着第二次写入和第二次读取都不会成功。

于 2010-05-16T06:10:52.840 回答