2013-04-22 6 views
6

でscanfのunsigned char型、これは私のコードの一部です:

u_char paket[100]; 
//here i put some data into array and then trying to change it by user 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]); 

私の入力は、たとえば88.88.88.88.88.88ことがpaket[0] - paket[5] 88に設定されるが、それはまたpaket[6],paket[7]を変更そしてpaket[8]から0

どのように修正できますか?私は[0] - [5]

+0

あなた 'u_char'配列の宣言は、にすべての要素を初期化するかもしれませんあなたはビッグエンディアンシステム上の各フォーマット識別子にint型で4バイト/文字をスキャンするかもしれません。 – collapsar

+0

ああ、私の間違い、私は全体のコードを投稿しませんでした。第1行と第2行との間で、その配列にデータをロードする。 scanfの前にこれらの要素が0に設定されていない場合、問題はscanfです。 – user2306381

答えて

0

あなたのコードは大丈夫です

u_char paket[100]; 
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]) 

paket[6], paket[7] and paket[8]の値を変更しませんを変更する必要があります。

4

あなたのコードはC99以降に対応しています。おそらく、C99で導入されたhh長さ修飾子をサポートしないC標準ライブラリを使用していると思われます。おそらくMicrosoft Cの標準ライブラリです。

あなたはこの古いC標準ライブラリをサポートする必要がある場合は、例えば、C89-互換性があるようにあなたのコードを書き換える必要があります:

unsigned p[6]; 

if (scanf("%x.%x.%x.%x.%x.%x", &p[0], &p[1], &p[2], &p[3], &p[4], &p[5]) == 6) 
{ 
    int i; 
    for (i = 0; i < 6; i++) 
     paket[i] = p[i]; 
} 
+0

ありがとう! btw符号なしp [6];または署名されていないchar p [6]。 ?大丈夫ですか? – user2306381

+0

@ user2306381: '%x'は' unsigned'へのポインタを必要とし、 'unsigned char'へのポインタではないので、' unsigned p [6]; 'にする必要があります。 – caf