이코드가 왜 안되는건지 좀 알려주세요

envy100의 이미지

char tmp3;
tmp3 = 'A';
sscanf(&tmp3, "%d", &tmp2);
printf("calling num2 : %X %d\n", tmp3, tmp2);

이게 왜 안돼는 거죠.

simpid의 이미지

envy100 wrote:
char tmp3;
tmp3 = 'A';
sscanf(&tmp3, "%d", &tmp2);
printf("calling num2 : %X %d\n", tmp3, tmp2);

이게 왜 안돼는 거죠.

sscanf는 첫번째 인자는 문자열입니다.
님의 코드로 볼땐...

char tmp3[] = "A";

sscanf(tmp3, "%d", &tmp2);

형식으로 되어야 합니다.

char tmp3을 &tmp3 으로 억지로 입력하면...
메모리의 tmp3 다음의 값이 뭐가 올지 모르는데.. 예측할 수 없는 결과가 나올것 같습니다.

그런데... 문자열에 A가 들어있는데.. %d로 읽으면 어떻게 될까요?

jemiro의 이미지

envy100 wrote:
char tmp3;
tmp3 = 'A';
sscanf(&tmp3, "%d", &tmp2);
printf("calling num2 : %X %d\n", tmp3, tmp2);

이게 왜 안돼는 거죠.

당연히 안되죠.
첫번째문제점..
tmp2를 정의하지 않았다.
int tmp2;
를 명시해주어야 합니다.. 기본중에 기본..

두번째 'A'는 int가 아니니깐 sscanf의 "%d" 로는 못받습니다.
"A" 16진수의 그것이라면 "%x"로 해야 하는것이고,
혹시 A의 아스키값을 넣고 싶다면,
temp2 = 'A'; 라고 해야 하는것입니다.

자세한건 man sscanf 해서 읽어보십시오..