【问题标题】:Picky std::string char array constructor挑剔的 std::string char 数组构造函数
【发布时间】:2017-04-22 18:31:26
【问题描述】:

好吧,我可能很愚蠢,但我不知道字符串构造函数要我输入什么类型作为第二个参数。这很好:

unsigned char *cStringWannabe = new unsigned char[length];
baseStream.read((char*)cStringWannabe, length);

std::string *str = new std::string(cStringWannabe, cStringWannabe+sizeof(cStringWannabe));

但是这超过了大小一并且没有任何意义。

我不知道要将sizeof(cStringWannabe) 转换成什么来取悦构造函数。

编辑:

好的,既然我在很多层面上都错了,是时候澄清一下了。

我想要一个函数,它可以从 fstream 中读取单个字符,将该字符解释为字符串的长度,然后将后面的(长度)字符读入字符串对象。

如果给函数一个指向现有字符串的指针,我希望它会修改它以包含新数据。

【问题讨论】:

  • sizeof(cStringWannabe) 是指针的大小。你可能不希望那样。你可能也不想newstd::string,除非你真的遇到内存泄漏。
  • cStringWannabe+sizeof(cStringWannabe) 没有意义。 cStringWannabe 是一个指针,sizeof(cStringWannabe) 是它的大小,在这里将它们加在一起是没有意义的。
  • 我正在阅读 fstream 并且在 c++ 方面是新手。我正在尝试创建一个函数,该函数在调用时将读取一个 cha(指示长度),然后创建一个包含那么多字符的字符串。我可以得到一个指向字符串的指针,然后修改一个现有的字符串吗?
  • 如果你read的数据包含一个0-终止符,那么你甚至不需要为std::string添加第二个构造函数参数。如果数据不包含 0 终止符,那么您希望长度是多少?
  • 重新编辑,发布输入文件的十六进制转储。

标签: c++ stdstring


【解决方案1】:

你不能把它转换成任何东西来取悦构造函数。在这里使用 sizeof 是完全错误的,因为它给你的是指针的大小,而不是字符串的长度。如果有的话,你想要:

 std::string *str = new std::string(cStringWannabe, length);

你几乎不想像那样动态分配字符串,所以:

 std::string str(cStringWannabe, length);

您是否想读取这样的字符串是值得怀疑的:

baseStream.read((char*)cStringWannabe, length);

【讨论】:

  • 我会将一个指向字符串的指针放入我的函数中,并对其进行修改。我有一个要读取的字节数组; array[0] 是数组的长度,其余的是具有该长度的字符串的字符。将该字节数组(以 fstream 的形式)放入 std::string 的最快方法是什么?
  • @Karlovsky120:你可以搜索答案,或者继续阅读你的 C++ 书籍。
  • 我想通了。我只是在构造函数中使用了 char 数组的长度。我精神崩溃了。从那以后我真的很想删除这个。我认为它对社区没有用。
猜你喜欢
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多