我在将字符串写入文件时遇到一些问题, 如何将字符串写入文件并能够以ascii文本的形式查看? 因为当我设置str的默认值但我输入str数据时,我能够这样做 感谢。
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
fstream out("G://Test.txt");
if(!out) {
cout << "Cannot open output file.\n";
return 1;
}
char str[200];
cout << "Enter Customers data seperate by tab\n";
cin >> str;
cin.ignore();
out.write(str, strlen(str));
out.seekp(0 ,ios::end);
out.close();
return 0;
}
答案 0 :(得分:8)
请使用std::string
:
#include <string>
std::string str;
std::getline(cin, str);
cout << str;
我不确定你的案例中的确切问题是什么,但>>
只读取第一个分隔符(即空格); getline
将读取整行。
答案 1 :(得分:1)
请注意&gt;&gt;操作员将读1个字。
std::string word;
std::cin >> word; // reads one space seporated word.
// Ignores any initial space. Then read
// into 'word' all character upto (but not including)
// the first space character (the space is gone.
// Note. Space => White Space (' ', '\t', '\v' etc...)
答案 2 :(得分:1)
你在错误的抽象层面上工作。此外,在关闭文件之前,无需seekp
到文件的末尾。
您想要读取字符串并写入字符串。正如Pavel Minaev所说,这可以通过std::string
和std::fstream
直接支持:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::ofstream out("G:\\Test.txt");
if(!out) {
std::cout << "Cannot open output file.\n";
return 1;
}
std::cout << "Enter Customer's data seperated by tab\n";
std::string buffer;
std::getline(std::cin, buffer);
out << buffer;
return 0;
}
如果要编写C,请使用C.否则,请使用您正在使用的语言。
答案 3 :(得分:0)
我无法相信没有人发现这个问题。问题是您在未使用空字符终止的字符串上使用strlen
。 strlen
将继续迭代,直到找到零字节,并且可能返回不正确的字符串长度(或者程序可能崩溃 - 它是未定义的行为,谁知道?)。
答案是对字符串进行零初始化:
char str[200] = {0};
提供您自己的字符串作为str
的值,因为这些内存中的字符串是以空值终止的。