C에서 배열 질문
숫자를 문자로 문자를 숫자로 변경하는 것을 테스트하고 있는데 궁금한 점이 있습니다.
===========================
#include
#include
int main()
{
char arr[10]={0,};
// int n = 123;
int n = 1234;
sprintf(arr,"%d",n);
// printf(" %c %c %c %c\n",arr[0],arr[1],arr[2],arr[3]);
printf("%c %c %c %c %c %c %c\n",arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6]);
char c;
c = arr[0];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
c = arr[1];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
c = arr[2];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
c = arr[3];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
c = arr[4];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
c = arr[5];
sscanf(&c,"%d",&n);
printf("char -> int %d\n",n);
return 0;
}
===================
주석을 컴파일하고 실행하면
1 2 3 ?
char -> int 1
char -> int 2
char -> int 3
char -> int 3
char -> int 3
char -> int 3
나오고
바로 컴파일하고 실행하면
1 2 3 4
char -> int 1
char -> int 2
char -> int 3
char -> int 4
char -> int 4
char -> int 4
이렇게 나오는데
질문은
왜 주석부분에서는 ?나오고 아닌것은 안나오는지...
둘다 마지막 숫자는 왜 반복되는지 궁금합니다.
(제 생각에는 배열을 초기화해서 아무것도 없는 상태에서 숫자를 문자로 넣고 남은 부분은 널이고
그러면 아무것도 출력이 되지 않아야 할텐데... 에러가나거나...
이런 생각입니다....)
으음..
제가 돌려보니 ?는 안뜨네요..
아마 그 숫자만 들어가서 마지막 4번째 배열에 있는 값이 0으로 초기화가 안되어 있는 상태인것같아요
그래서 기본 초기화 값인 0xcc가 들어간게 출력되지 않았나 예측해봅니다..
참고해보세요.
결론.
1 2 3 ? 가 반복적으로 출력된다면. 일단. 데이터를 확인을 해봐야 할거 같습니다.
다른 환경에서는 모두 1 2 3 4 가 출력되네요.
그런데. 이상하게도. 복사해서 붙여 넣기를 하는데.
1 2 3 4
1 2 3 4
Visual Studio 2017과 http://cpp.sh/ 에서는
여기까지만. 복사가 되네요. 뭔가. CR LF가 같이 출력되는 걸지도 모르겠습니다.
확인해보니. 이렇게 NULL값으로 입력됩니다.
49 '1'
50 '2'
51 '3'
52 '4'
0 '\0'
0 '\0'
0 '\0'
각 함수에 인자값. 리턴값. 오류값'을 확인해 봐야 할겁니다.
sscanf()
http://www.cplusplus.com/reference/cstdio/sscanf/
http://itguru.tistory.com/67
Visual Studio 2017 (32비트. 64비트)
http://codepad.org/dWeLDSCz
코드 패드'에서는 1234가 뒤에 붙어서 출력 되는 현상이 보입니다.
http://cpp.sh/
http://ideone.com/hZoO3K
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기