我正在尝试读取文件并将数据放入字符串中。但是,编译器将输出此结果。
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
答案 0 :(得分:4)
请注意,标准C ++不支持像char data[num * num +1]
这样的可变长度数组(num
不是constexpr)。之所以可以编译代码,是因为您可能使用的扩展程序支持VLA。但是,对于可移植代码,您需要使用一些动态数据结构,例如vector
。
无论如何,您不会初始化data
,因此您的第一个strcat
可能会将tmp
的(有效)内容附加到以垃圾开头的data
。您的输出����
不是换行符的结果,而只是第一个strcat
附加文件内容的垃圾。
char data[num * num +1] = { 0 };
应该可以解决此问题。