char *ch = ‘c’; printf(“%c”, ch);가 왜 정상출력되는지 궁금합니다.
글쓴이: awidesky / 작성시간: 일, 2020/11/01 - 8:21오전
#include <stdio.h> int main(void) { char* cr = 's'; printf("%c\n", *cr); return 0; }
위와 같은 코드는 char 리터럴 데이터가 컴파일러 내에 존재해 실행시 segmentation fault를 일으킨다는 사실은 알고 있습니다.
#include <stdio.h> int main(void) { char* cr = 's'; printf("%c\n", cr); return 0; }
근데 이 코드는 실행이 멀쩡히 되네요...? 심지어 주소값을 출력했는데...?
혹시 이유를 아시는 분 계신가요..?
Forums:
컴파일 할 때 Error 메시지 뿐 아니라
컴파일 할 때 Error 메시지 뿐 아니라 Warning 메시지도 잘 보세요.
보이는 것이 전부는 아닙니다.
kldp 에 글 쓸 때 코드는 code 태그로 감싸 주세요.
세벌 https://sebuls.blogspot.kr/
's'와 "s"는 다릅니다.
's'와 "s"는 다릅니다.
's'는 소문자 s에 대한 ASCII 값을 돌려주고,
"s"는 s 문자가 저장되어 있는 메모리의 주소값을 돌려줍니다.
앞의 try에서 "s" 로 바꿔 보세요.
char *cr = 's' 는 char *cr =
char *cr = 's' 는 char *cr = 0x73 하고 같은 것이에요
첫번째 printf 문에서 *cr 는 0x73 주소를 참조했으니 segmentation fault 가 발생하는 것이고
두번째 printf 문에서는 0x73 값을 %c 로 출력했으니 정상적으로 값이 출력되는 것이에요
댓글 달기