2017-11-28 5 views
-3

以下のコードを試しましたが、結果が正しくありません。私は、バッファのサイズを持つ何かが間違った方法で実装できると思います。Read()integer in c

int f(int* as) { 
    *as = read(STDIN_FILENO, as, sizeof(int)); 
} //i print 123 

int s; 
f(&s); 

printf("%d",s); // prints 4 
+2

は、なぜあなたは結果が「AREN思います参照してください。正しい?何が起こると思いますか?あなたはどのような情報を与えていますか?入力を促し、何が起こると思われるのか、なぜそれが間違っていると思うのかを言う[mvce](https://stackoverflow.com/help/mcve)を与えてみてください。 –

+0

おそらく 'read()'関数が返すサイズです。 –

+0

@ChrisDodd読み値を 's'に保存したいのですが、この場合は123です。なぜ値の代わりにサイズが返されるのかわかりませんが、これは' sizeof(int) 'のために起こりますか? –

答えて

0

つあなたが

1を期待する結果を与えるためのプログラムを防止するためのもの)、標準入力(文字)から読み取られ、(バイナリ)整数

2にそれを保存するためにreadを使用して) 、その同じ整数にreadの結果を格納する1に保存されている(間違った)値を上書き)

のに読み取るために、scanfまたはfgetsatoi ...)を見てください文字配列(文字列)、その後は、例えば、文字を2進数に読ん変換

char str[20]; 
fgets(str, 20, stdin); 
int s = atoi(str); 

readバージョン

char str[20]; 
ssize_t nread = read(STDIN_FILENO, str, 20); 
int s = atoi(str); 

what an integer is

+0

待ち、 'read()'でそれを得る方法はありませんか?私は割り当てを持っており、 'read()'を除いてライブラリ関数を持たずに 'scanf()'を実装しています。 –

+0

もちろん編集することができます。しかし、文字列を読むためには、一度に行を読み込む 'fgets'が大好きです(最大サイズか' \ n'まで)。 'read'は、与えられたサイズを正確に読みたいとき、バイナリのものに使われる低レベルの関数です。うまくいく。 (そして、 'fgets'はある時点で' read'を呼び出します)。 –

+0

さて、私は考えましたが、 'atoi'も"禁止されています "。ポインタを作成し、' int * 'にキャストすることについて考えるべきでしょうか? –