2017-11-28 1 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

이 왜 결과는 '그런가 생각보기 맞습니까? 무슨 일이 일어날 것으로 예상됩니까? 프로그램에 어떤 정보를 제공합니까? 의견을 제시하고 발생할 것으로 예상되는 내용과 왜 그것이 잘못되었다고 생각하는지 말하면서 [mvce] (https://stackoverflow.com/help/mcve)를 제공하십시오. –

+0

아마도'read()'함수에 의해 리턴 된 크기 일 것입니다. –

+0

@ChrisDodd's'에 read 값을 저장하고 싶습니다. -이 경우에는 123입니다. value 대신 size가 반환되는 이유는 모르겠지만, 이는 sizeof (int) 때문에 발생합니다. –

답변

0

두 가지는 표준 입력 (문자에서 읽을 read를 사용하여

1) 기대하는 결과를 제공)과 (진) 정수

2)에 그것을 저장하기 (A) 내로 판독하는 (1)에 기억 된 (잘못된) 값)

는 ... scanf 또는 fgets ( atoi를 보라)을 덮어 동일한 정수로 read 결과를 기억 문자 배열 (문자열), 다음는 예를 들어, 문자 진수로 읽어 변환

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 *로 주조해야할까요? –