0

コマンド ライン引数 (argv[1]) から式を計算する C++ ソース ファイルを見つけましたが、ファイルを読み取るように変更したいと考えています。

double Utvardering(char* s) {
srcPos = s;
searchToken();
return PlusMinus();
}

int main(int argc, char* argv[]) {
if (argc > 1) {
    FILE* fFile = fopen(argv[1], "r");
    double Value = Utvardering(fopen(argv[1], "r"));
    cout << Value << endl;
}else{
    cout << "Usage: " << argv[0] << " FILE" << endl;
}
cin.get();
return 0;
}

ただし、Utvardering 関数には char* パラメーターが必要です。ファイルから読み取ったデータ fopen を char* に変換するにはどうすればよいですか?

4

5 に答える 5

6

fread()関数を使用して、FILE* からバッファーにデータを読み取ります。そのバッファを Utvardering() に送信します。

于 2009-06-11T21:28:17.073 に答える
6

関数 fopen はファイルを開くだけです。そこから文字列を取得するには、ファイルを読み取る必要があります。これにはさまざまな方法があります。文字列の最大サイズが事前にわかっている場合は、次のようになります。

const int MAX_SIZE = 1024;
char buf[MAX_SIZE];
if (!fgets(buf, MAX_SIZE, fFile) {
  cerr << "Read error";
  exit(1);
}
double Value = Utvardering(buf);

注: この方法は、C++ ではなく C で一般的です。より慣用的な C++ コードが必要な場合は、次のようなものを使用できます (FILE と fopen の代わりに)。

ifstream in;    
in.open(argv[1]); 
if (!in) { /* report an error */ }
string str;
in >> str;
于 2009-06-11T21:35:34.467 に答える
1

「Utvardering」が何を期待しているか、情報をどのように使用しているかはわかりません。

2つの可能性があります -

1) Utvardering は char* を使用して定義できますが、FILE* が必要です (実際には、char* を void* のように扱います)。かなりひどい練習ですが、これは前に見たことがあります。その場合は、fFile を char* にキャストして渡すだけです。

2) Utvardering は、入力として null で終了する文字列 (char*) を想定している可能性があります。このように fopen を使用している場合、freadを使用してファイルの内容をバッファー (char[]) に読み込み、それを char* を受け取る関数に渡すことができます。

于 2009-06-11T21:26:45.720 に答える
0

ファイルを文字配列に読み込み、それを に渡すコードを記述する必要があるようですUtvardering

の戻り値を渡すだけfopenで、そのポインタが指す不透明データ構造のアドレスが に渡されUtvarderingます。Utvarderingこれらのバイトが文字データでない場合は、喜んで文字データとして扱います。良くない。

于 2009-06-11T21:30:17.927 に答える
0

ファイルからデータを読み取る良い例: http://www.cplusplus.com/reference/clibrary/cstdio/fread/ 次に、バッファを関数に渡します。

于 2009-06-11T21:36:03.623 に答える