C ++从文件中读取错误

时间:2014-10-01 09:08:12

标签: c++ ifstream

我有一些问题需要帮助。这是怎么回事:

我使用以下代码将一定数量的字符读入char数组中以便稍后处理:

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

为什么会发生这种情况?&#39; ASCII&#39;当我尝试从文件中读取某个长度时来自?

最后,如果我想从文件中获取特定长度,我应该使用哪种代码?例如,如果我想读取前4个或8个或16个甚至20个字符?它不一定必须进入char数组,它可以保存为字符串。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

你的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&lt; =算上他们!

0开始的14个地方'\0'

结束

此外,当字符串存储在内存中时,它们必须以空字符15终止。否则打印它们的功能不知道何时停止,这可能是你的垃圾来自哪里。

因此,因为空终止符占用了 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. 个空格之一,所以只留下14个从文件中读取。

所以:

{{1}}

看看是否有效。