unsigned int fname_length = 0;
//fname length equals 30
file.read((char*)&fname_length,sizeof(unsigned int));
//fname contains random data as you would expect
char *fname = new char[fname_length];
//fname contains all the data 30 bytes long as you would expect, plus 18 bytes of      random data on the end (intellisense display)
file.read((char*)fname,fname_length);
//m_material_file (std:string) contains all 48 characters
m_material_file = fname;
// count = 48
int count = m_material_file.length();


现在,当尝试这种方式时,在将char数组设置为全部''之后,intellisense仍然显示18字节的数据,我得到的结果完全相同。即使没有读取文件

char name[30];
for(int i = 0; i < 30; ++i)
{
  name[i] = ' ';
}
file.read((char*)fname,30);
m_material_file = name;
int count = m_material_file.length();


任何想法在这里出了什么问题,它可能是完全显而易见的,但我很困惑!

谢谢

最佳答案

听起来文件中的字符串不是以空值结尾的,而intellisense则假设它是null。或者,当您将字符串(30)的长度写入文件时,您没有在该计数中包含空字符。尝试添加:

fname[fname_length] = '\0';


在file.read()之后。哦,是的,您还需要分配一个额外的字符:

char * fname = new char[fname_length + 1];

关于c++ - 非常奇怪的char数组行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1608953/

10-11 16:25