如何将字符串读入文件C ++

时间:2009-10-21 17:35:44

标签: c++

我在将字符串写入文件时遇到一些问题, 如何将字符串写入文件并能够以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;
}

4 个答案:

答案 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::stringstd::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)

我无法相信没有人发现这个问题。问题是您在未使用空字符终止的字符串上使用strlenstrlen将继续迭代,直到找到零字节,并且可能返回不正确的字符串长度(或者程序可能崩溃 - 它是未定义的行为,谁知道?)。

答案是对字符串进行零初始化:

char str[200] = {0};

提供您自己的字符串作为str的值,因为这些内存中的字符串是以空值终止的。