2009-06-11 20 views
0

コマンドライン引数(argv [1])から式を計算するC++ソースファイルが見つかりましたが、ファイルを読み取るように変更します。C++ - FILE *をCHARに変換する*

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; 
} 

ただし、機能を割り当てるにはchar *パラメータが必要です。ファイルから読み込んだデータをchar *に変換するにはどうすればよいですか?

+0

面白いのですが、私はUtvardering()がSwedishUtvärdering()でなければならないと考えています。これはEvaluation()を意味します。頻繁にコードでスウェーデン語を見て、特にそうではありません:) – ralphtheninja

答えて

5

関数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; 
+0

MAX_SIZEはどこで宣言されていますか? –

+0

MAX_SIZEは、関数本体またはグローバル定数のいずれかで定数として宣言できます。通常、グローバル名前空間の混乱が少なくなるほど、メイン関数の内部に配置するだけです。上記の例を更新しました。 –

+0

最初の例では、char *、任意のアイデアに設定されていませんか? –

1

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

は、二つの可能性がある -

1)Utvarderingボイドのよう* CHARを治療する、char *を使用するが、実際には(FILE *を期待して定義することができます*)。私はこれを見たことがありますが、それはかなりひどい練習です。その場合は、fFileをchar *にキャストして渡してください。

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

6

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

+0

fclose()後でそれを覚えておいてください! –

0

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

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

関連する問題