C++从文件中读取不正确
问题描述:
有一个问题,我想帮助。这是怎么一回事呢:C++从文件中读取不正确
我用下面的代码阅读一定量的字符为字符数组后处理:
char str[15]; // first 16 characters that i need to get from file
std::ifstream fin("example.txt");
if(fin.is_open()){
std::cout<<"File opened successfully \n";
for(int i = 0; i<=15; i++)
{
fin.get(str[i]); //reading one character from file to array
}
}
else{
std::cout<<"Failed to open file";
}
std::cout<<str;
它工作正常,前4甚至5个字符,但是当它达到8时,它开始打印垃圾字符。
example.txt文件的内容,我从中读取文本。
The Quick Brown Fox Jumped Over The Lazy Dog The Quick Brown Fox Jumped Over The Lazy Dog
输出,当我读8个字:
The Quic�j�
输出,当我读到16个字符:
The Quick Brown ASCII
这究竟是为什么,在哪里了 'ASCII' 来的时候我尝试从文件中读取一定的长度?
最后,如果我想从文件中获取特定长度,应该使用哪种代码?例如,如果我想读取前4或8或16甚至20个字符?它不一定必须存入char数组,它可以被保存为一个字符串。
预先感谢您。
答
你的char数组只有15个字符长。所以这条线去出界:
for(int i = 0; i<=15; i++)
如果i
等于15
那是太多了,因为你的数组数从0
到14
。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
< =数它们!
有15
地方开始0
在14
结束此外,当字符串存储在内存中,他们必须以空字符'\0'
被终止。否则,打印它们的函数不知道何时停止,这可能是垃圾的来源。
因此,因为空终止符将占用您的15
空格之一,所以您只能从14中读取文件。
所以:
for(int i = 0; i < 14; i++)
{
fin.get(str[i]); //reading 14 characters (0-13)
}
str[14] = '\0'; // add the string terminator at the end of the array.
看看是否能工程。
+0
哦,是的!无效终结者,我怎么能忘记?我是一个血腥的白痴。谢谢你的答案 – Alighieri 2014-10-01 18:25:22
您需要在从文件中读取最后一个字符后放置一个'\ 0'字符。 – 2014-10-01 09:11:58
std :: string line; getline(鳍,线); std :: cout Jagannath 2014-10-01 09:12:08
您的char数组需要更大或者您的循环需要 2014-10-01 09:13:23