当前位置:  开发笔记 > 编程语言 > 正文

有没有更好的方法来打印cout最多N个字符的字符串?

如何解决《有没有更好的方法来打印cout最多N个字符的字符串?》经验,为你挑选了2个好方法。

-edit-我发送的是二进制而不是字符串.我的测试是使用html页面所以在这个例子中我只使用一个字符串但我的问题是关于二进制,向量和使用ostream进行调试.我让这清楚了一些混乱.

我有以下代码:

cout << string(&v[0]).substr(0, len);

有没有更好的方法来打印字符串v与cout长度len?我想做v [len] = 0但是我的一个断言被抛出,大小为1.我的代码是:

vector v;
v.reserve(1024*16); //required
v.resize(1); //so we can do &v[0]
recv(sockfd, &v[0], v.capacity(), 0);
while (l > 0)
{
    cout << string(&v[0]).substr(0, l);
    recv(sockfd, &v[0], v.capacity(), 0);
}
cout << "the size is " << v.size();

SCFrench.. 7

您可以在cout对象上使用ostream :: write方法:

#include 
#include 

using namespace std;

int main()
{
  vector test;
  test.push_back('a');
  test.push_back('b');
  test.push_back('c');

  cout.write(&test[0], 3);
  cout << endl;
}

输出:

ABC

由于ostream :: write返回一个ostream并包含*this,你甚至可以这样做

cout.write(&test[0], 3) << endl;

但我不确定这实际上是否更好(或更清晰).



1> SCFrench..:

您可以在cout对象上使用ostream :: write方法:

#include 
#include 

using namespace std;

int main()
{
  vector test;
  test.push_back('a');
  test.push_back('b');
  test.push_back('c');

  cout.write(&test[0], 3);
  cout << endl;
}

输出:

ABC

由于ostream :: write返回一个ostream并包含*this,你甚至可以这样做

cout.write(&test[0], 3) << endl;

但我不确定这实际上是否更好(或更清晰).



2> Johannes Sch..:
vector v;
v.reserve(1024*16); //required
v.resize(1); //so we can do &v[0]
recv(sockfd, &v[0], v.capacity(), 0);

那段代码有一个bug.调用reserve只能保证你可以推送至少那么多元素,直到向量的引用和迭代器再次失效(通过可能重新分配使用的缓冲区).这会不会让你写中V [0..1024*16-1],如同你那里recv.你必须做

v.resize(1024*16); //required

实际上有很多元素可用,而实际上是传递v.size()而不是v.capacity().

对于你的子串操作,我可能会这样做

std::string str(&v[0], n);
std::cout << str;

其中n的范围从0到v.size().你可以std::min(n, v.size())用来保证,如果你的情况下n可能更大,你需要一个上限.

(在一个侧节点上,我会避免在那里有一个名为"l"(ell)的变量,因为它看起来非常像"1"(一个),这可能会混淆地狱之人

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有