C++ Picky std::string char数组构造函数

C++ Picky std::string char数组构造函数,c++,stdstring,C++,Stdstring,好吧,我可能很愚蠢,但我不知道字符串构造函数希望我输入什么类型作为第二个参数。这很好: unsigned char *cStringWannabe = new unsigned char[length]; baseStream.read((char*)cStringWannabe, length); std::string *str = new std::string(cStringWannabe, cStringWannabe+sizeof(cStringWannabe)); 但这超出了尺

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

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

std::string *str = new std::string(cStringWannabe, cStringWannabe+sizeof(cStringWannabe));
但这超出了尺寸1,没有任何意义

我不知道为了取悦构造器,应该将
sizeof(cStringWannabe)
转换成什么

编辑:

好吧,既然我在很多方面都错了,是时候澄清一下了

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


我更喜欢给函数一个指向现有字符串的指针,然后它将修改该字符串以包含新数据。

您不能为了取悦构造函数而将其强制转换为任何内容。在这里使用sizeof是完全错误的,因为它给出的是指针的大小,而不是字符串的长度。如果有的话,您需要:

 std::string *str = new std::string(cStringWannabe, length);
您几乎不希望这样动态分配字符串,因此:

 std::string str(cStringWannabe, length);
你可能不想读这样的字符串:

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

sizeof(cStringWannabe)
是指针的大小。你可能不想那样。您可能也不想
new
一个
std::string
,除非您真的陷入内存泄漏。
cStringWannabe+sizeof(cStringWannabe)
毫无意义<代码> CSTRIN WANABABE <代码>是一个指针和<代码> siZeof(CSTRIGWANNABE)<代码>是大小,并将它们添加到一起毫无意义。我正在阅读FSRATH,当谈到C++时,我是新手。我试图创建一个函数,当调用该函数时,它将读取cha(表示长度),然后创建一个包含这么多字符的字符串。我可以获取一个指向字符串的指针,然后修改现有字符串吗?如果您读取的数据包含一个0-终止符,那么您甚至不必为
std::string
添加第二个构造函数参数。如果数据不包含0-终止符,那么您希望长度是多少?重新编辑,发布输入文件的十六进制转储。我将在函数中引入一个字符串指针,并对其进行修改。我有一个要读取的字节数组;array[0]是数组的长度,其余的是具有该长度的字符串的字符。将字节数组(FSFATH的形式)转换成STD::String?@ KalLoVSky120:最快的方法是:你可以搜索答案,或者继续阅读C++的书。我只是在构造函数中使用了char数组的长度。我精神崩溃了。事实上,我真的很想深入研究这一点。我认为这对社区没有什么用处。