1


0

すみません、おそらくこれはばかげた質問です。

私はこのようなファイルがあります:

36 146 10 53 240 133 104 28 51 81 124 …​

だから私はプログラムから数字を読みたいので、私はそうします:

  1. some function …​..

int i;符号なしcharキー[16]。 FILE * fp;

printf( "\ n ------ \ n");

// open filename
fp = fopen( "key.txt"、 "a");

printf( "128ビットキーの読み取り:\ n"); (i = 0; i <16; i){fscanf(fp、 "%d \ t"、

printf( "\ n ------ \ n");

fclose(fp); 0を返します。

しかし、プログラムが画面に結果を表示すると、次のようになります。

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …​

何か案は ?

6 回答


4


ファイルを読み取りモードで開く必要があります。

p = fopen( "key.txt"、 "r");

fscanf()の戻り値を調べて、読み取りが実際に成功したかどうかを確認することもお勧めです。

*編集:*私はちょうど気づいた:

符号なしcharキー[16]。

整数の配列でなければなりません(私は思う - コードから「key」の意味が何であるかはあまり明確ではありません)。

intキー[16]。


2


直接質問に答えるわけではありませんが、失敗するとファイルポインターが不明な状態のままになることがほぼ確実であるため、「+ fscanf()+」を使用しないことをお勧めします。

望ましい解決策は、行読み取り関数( `+ fgets()`など)のいずれかを使用してから、それが提供する文字列を ` sscanf()+`にすることです。

これには2つの利点があります。

  • あなたは関数ポインタの状態を知るでしょう。

  • あなたはあなたの心のコンテンツに文字列を `+ sscanf()+`することができます それを認識します。

さらに、 `+ scanf()`を `"%d "+`にすると、整数が文字配列に格納されます。 基本的な型はほぼ確実に異なるサイズなので、それはあなたが望むことではありません。 文字をスキャンするか、基になるデータ型を整数に変更してください。

最後に、ファイルを読み取りモードではなく追加モードで開いています。


0


fscanfにスペースとタブがあるのはなぜですか? 入力にタブまたはスペースがありますか? また、読まないために追加するためにファイルを開いています。 ( "a"は追加用、 "r"は読み取り用です)

あなたのfscanfをあなたの入力に合うように変更して、もう一度試すことができますか?


0


いくつかの修正:

int i;符号なしcharキー[16]。 FILE * fp;

printf( "\ n ------ \ n");

//ファイル名を開くfp = fopen( "key.txt"、 "r"); // <---読み取りモード

printf( "128ビットキーの読み取り:\ n"); (i = 0; i <16; i){fscanf(fp、 "%c \ t"、

printf( "\ n ------ \ n");

fclose(fp);


0


こんにちは、

私はKを通して私のやり方で働いて楽しんできました

HTH

乾杯、

#含める

int main(){

unsigned int i、res、キー[16]。 unsigned int * val = key; char * key_file = "key.txt"; FILE * fp;

//((fp = fopen(key_file、 "r"))== NULL){fprintf(stderr、 "%s:ファイル%sを開けません\ n"、argv [0]、key_file); 1を返します。 }

printf( "------ \ n");

printf( "128ビットキーの読み取り:\ n"); while(fscanf(fp、 "%u"、val)== 1){printf( "%u"、(* val)); }

printf( "\ n ------ \ n");

fclose(fp);

0を返します。

}


0


どのくらいの量のデータを読むかに注意する必要があります。 あなたのループは16回繰り返し続け、毎回 'key’にsigned intを書き込もうとします。 32ビットマシンでこれを4回以上実行すると、割り当てた16ビット(16文字)の外側に書き込むことになるため、未定義の動作になります。 代わりにunsigned intを使うことで大丈夫です。

フォーマット文字列内のタブ文字は、スペースが空白に一致するため、必要ありません。

int i; unsigned int key [16]; // char  - > int FILE * fp;

printf( "\ n ------ \ n");

// open filename
fp = fopen( "key.txt"、 "r"); // a  - > r

printf( "128ビットキーの読み取り:\ n"); ((i = 0; i <16; i)の場合 printf( "%d \ t"、キー[i]); } else {printf( "キーの読み取りエラー。\ n"); }}

printf( "\ n ------ \ n");

fclose(fp); 0を返します。

あなたの質問に答えるためにゼロの理由はあなたが "a"でファイルを開くことです。 追加します。 読み取り用の "r"を使用する必要があります。