2011-07-04 18 views
0

Visual StudioとCodeBlocksの両方でWindowsでコンパイルすると動作するプログラムがありますが、QT Creatorを使用してKubuntuでコンパイルすると、fscanf関数は機能しません同じ方法。Linux環境に切り替えましたが、fscanfは動作しません

私は、他のファイルの名前を含むファイルを持っています。それぞれのファイルは、スペースと改行で区切られています。作業環境でfscanfを "%s"で使用すると、ファイル名がchar entity[21]に読み込まれます。このテストケースでは、 "ent001.txt"を保持し、nullバイトで終了します。しかし、Linuxでは、entity [0]には "-74/182"といくつかのヌルバイトがあり、いくつかのファイルは読み込まれず、それらの文字もありません。 Fscanfは-1を返します。

移植性に深刻な問題がありますか、私の標準ライブラリは少しばかり離れていますか?

EDIT:いくつかのサンプルコードの場合: 'levelfile' が値ハード今で符号化された 'のchar *のlevelfile [21]' である

fin = fopen(levelfile, "r") ; 

    test = fscanf(fin, "%s", entity) ; 

。テストは戻り値を見つけるための 'int'です。 'fin'はnullに等しくありません。

EDIT2:レベルファイルのXXDから出力:

データファイルが作成されますでした
0000000: 656e 7430 3031 2e74 7874 200a 656e 7430 ent001.txt .ent0 
0000010: 3032 2e74 7874 2024 200a 5472 6967 6765 02.txt $ .Trigge 
0000020: 7230 3031 2e74 7874 2024 200a 3020 3531 r001.txt $ .0 51 
0000030: 3220 3531 3220 3020 0a31 2037 3132 2037 2 512 0 .1 712 7 
+0

私は、この回答にどのように期待しているのか分かりません。 –

+0

サンプルコードはどうですか? :) – DipSwitch

+1

1.コードはどこですか? 2. fscanfが負の値を返す場合は、 'entity'に意味のあるものが含まれるとは限りません。キャッチしていないコード内の以前のエラー状態を確認します。 – hobbs

答えて

1

?どんな場合でも、Unix改行の代わりにDOSスタイルの改行(CR + LF)がありますか?

これが問題であれば、テキストモード(fopen(fname, "rt"))が役に立ちます。またはdos2unixユーティリティ(一部のLinusディストリビューションではd2u)でファイルを実行できます。

+0

これらの両方を試してみても問題は解決しません。また、ファイルはNotepad ++を使用してWindows環境で作成されました。 – Lucas

+0

ファイルに対して 'hexdump'または' xxd'を実行して2-3行の出力をあなたの質問に付けることができますか? 'fscanf'への最初の呼び出しが失敗するか、それとも後で呼び出されますか? –

+0

プログラム内の最初の 'fscanf'呼び出しが失敗し、質問に追加されました。 – Lucas

関連する問題