从文件读取数据到字符串

时间:2018-10-20 22:41:00

标签: c++

我正在尝试读取文件并将数据放入字符串中。但是,编译器将输出此结果。

012  
345  
678  
����012345678  

带有新行。你能解释发生了什么吗?

#include <iostream>

using namespace std;
#include <fstream>
#include <cstring>
int main() {
  ofstream output("transform.out");
  ifstream input("transform.in"); 
  int num = 0;
  input >> num; 
  char tmp[num+1];
  char data[num * num +1];
  while(input >> tmp){
    cout << tmp << '\n';
    strcat(data, tmp);
  }
  cout << data; 
}

transform.in有此数据

3
012
345
678

1 个答案:

答案 0 :(得分:4)

请注意,标准C ++不支持像char data[num * num +1]这样的可变长度数组(num不是constexpr)。之所以可以编译代码,是因为您可能使用的扩展程序支持VLA。但是,对于可移植代码,您需要使用一些动态数据结构,例如vector

无论如何,您不会初始化data,因此您的第一个strcat可能会将tmp的(有效)内容附加到以垃圾开头的data。您的输出����不是换行符的结果,而只是第一个strcat附加文件内容的垃圾。

char data[num * num +1] = { 0 };应该可以解决此问题。