6

num.txt内容が行だけであるという名前のテキストファイルがあります123。それから私は以下を持っています:

void alt_reader(ifstream &file, char* line){
    file.read(line, 3);
    cout << "First Time: " << line << endl;
}

int main() {
    ifstream inFile;
    int num;
    inFile.open("num.txt");
    alt_reader(inFile, (char*)&num);
    cout << "Second Time: " << num << endl;
}

出力は次のとおりです。

First Time: 123
Second Time: 3355185

関数で読み取られたfstreamを取得し、mainで変数を割り当てる方法を理解するのを手伝ってもらえますか?本当にたくさんあるのでこれをやっていalt_readerますが、これは私が立ち往生している部分です。助けてくれてありがとう。

更新:Bill Onealのコメントを使用して、私は書いた

void alt_reader(ifstream &file, stringstream &str, int n){
    char buffer[n+1];
    file.read(buffer, n);
    buffer[n] = 0;
    str << buffer;
    cout << "First Time: " << buffer << endl; //First Time: 123
}

int main() {
    ifstream inFile;
    stringstream strm;
    int num;
    inFile.open("num.txt");
    alt_reader(inFile, strm, 3);
    cout << "Second Time: " << num << endl; //Second Time: 123
}

ありがとう。今何があるかについての批評はありますか?

4

2 に答える 2

7

変数を最初に印刷したときはchar *、ファイルをテキストファイルとして処理して印刷しました(そして、クラッシュしなかったのは幸運でした)。2回目に印刷したときに、それをとして再解釈しint、表現を完全に変えました。

あるタイプから別のタイプにポインタをキャストするときは常に、通常、未定義の動作を呼び出しています。charとの標準的な関係はないのでint、ここにあります。

編集:あなたのコメントの質問に答えるには:

#include <sstream>

void foo(std::stream &str) {
 str << "42\n";
};

int main() {
 int aNumber;
 std::stringstream aStringStream;
 foo(aStringStream); //Pass our stream to the function. It contains
    //"42\n" when the function returns.
 aStringStream >> aNumber; //aNumber == 42
 aNumber += 10; //aNumber == 52;
 std::cout << aNumber; //Print "52"
}
于 2010-04-05T22:16:47.267 に答える
2

ここには少なくとも2つの問題があります。

main()で:

  1. alt_readerintを渡す代わりに、文字列バッファをに渡す必要があります。
  2. 文字列を読みたいようです'123'が、intに値を持たせたいと考えています123

あなたができること:

void alt_reader(ifstream &file, char* line){
    file.read(line, 3);
    line[3]=0;
    cout << "First Time: " << line << endl;
}

int main() {
    ifstream inFile;
    inFile.open("num.txt");

    char buffer[128];
    alt_reader(inFile, buffer);

    int num=atoi(buffer);
    cout << "Second Time: " << num << endl;

    return 0;
}

文字列(scii)からintへ変換を追加line[3]=0;alt_readerて実行していることに注意してください。atoi

于 2010-04-05T22:25:59.523 に答える