0

次のコード行は、コンマで区切られた文字列、int、および 2 つの double を読み取り、それらを変数に格納することになっています。

fscanf(f,"%[^,],%d,%Lf,%Lf",name,&id,&east, &north);

Visual Studio 2010 コンパイラで動作し、正しい値を読み取ります。このプログラムを別のマシンで実行したところ、3 つの数値にはランダムな値がありましたが、文字列には正しい値がありました。

どうなり得るか?

4

1 に答える 1

1

%Lfは専用タイプlong doubleではありませんdouble。Microsoft コンパイラでlong doubleは、 は と同じサイズと表現を持っているdoubleため、たまたま機能しますが、それでもなお、コードは不一致の書式指定子を使用して未定義の動作を呼び出しています。で使用%lfするか、使用する場合doubleはタイプを に変更すると、どこでも機能するはずです。long double%Lf

于 2012-07-01T14:14:16.123 に答える