2013-07-14 3 views
1

그냥 얻을 수 없습니다. Char는 정수입니다. 맞습니까? 그래서scanf 및 정수로 char 유지

int var; 
scanf("%d", &var); 
I:[65] 
printf("%c", var); 
o:[A]. 

왜 할 wrog 다음입니다 수행 할 수 있습니다

char var; 
scanf("%d", &var); 
I:[A] 
printf("%d", var) 
O:[-1236778] 
+0

'% d '은'int *'를 기대하기 때문에'char *'가 아니기 때문에? –

+0

하지만 문자는 정수로 유지됩니까? – zubergu

+0

'char' **은 ** 정수형이지만 ** ** int는 int와 같지 않다. –

답변

1

을 두 번째 scanf()

scanf("%d", &var); 

에서 scanf() 인쇄 지시 %d을 구문 분석. 이는 &var 인수가 int의 주소가 될 것으로 예상 함을 의미합니다. 대신 char의 주소가 주어졌습니다. int의 크기는 확실히 char 크기보다 큽니다. scanf()int 크기를 'char'에 대해서만 의미하는 위치에 배치하려고 시도하므로 scanf()에서 이상한 일이 발생할 수 있습니다. 데이터를 배치해서는 안되는 장소입니다. 5 파운드 자루에 10 파운드 감자를 넣으려고하는 중입니다.

추가 - scanf("%d", &var);이 입력 "A"를 성공적으로 읽었는지 의심 스럽습니다. scanf()A을 볼 수 있으며 숫자가 아니기 때문에 int 정의를 충족하는 텍스트 입력을 검색하지 않습니다. 따라서 scanf("%d", &var)0의 값을 반환 할 것이므로 에 넣지 않았습니다. var. 베이컨을 저장하면, 그렇게하면 안되는 공간에 데이터가 놓이게됩니다. 당신이이 문자에 우연히 어떤 를 얻을 수 있도록

마지막 printf("%d", var)

는 단순히 설정 적이 한 var을 인쇄한다. -1236778이 보이지 않습니다. 게시물이 코드 나 입력/출력과 일치하지 않는다고 생각합니다.

+0

감사합니다. 귀하의 의견 및 데이터 형식 및 scanf 함수에 대한 추가 읽기 일부 그것을 가진 것처럼 느껴집니다. 마침내 :) – zubergu

+0

에 오신 것을 환영합니다. – chux