반응형
char* str = "a";
str = toupper(*str);
printf("%c\n", str);
str = tolower(str); // 여기서 왜 tolower(*str)는 안되나요?
printf("%c\n", str);
OUTPUT
A
a
설명:
char* str = “a”;
char* str 는 포인터 변수입니다. str에는 “a”의 주소값이 저장됩니다.
str = toupper(*str);
*str는 포인터 변수가 가르키는 값을 가지고 있으므로 ‘a’이고 toupper 함수의 리턴 값은 캐릭터의 정수값입니다. 결국 str에는 ‘A’의 정수값인 65가 저장됩니다.
printf(“%c\n”, str);
str에는 65 정수값이 그리고 대응되는 캐릭터는 ‘A’ 그러므로 ‘A’를 출력합니다.
str = tolower(str);
str에는 65가 들어있고 소문자로 변경합니다.
여기서 tolower(*str)일 경우에는 에러가 발생합니다. 왜 그럴까요?
현재 str에는 65라는 정수값이 들어있는데 이 말은 즉 포인터 변수인 str에 65가 저장되어 있다는 말입니다. *str는 메모리 주소가 65인 곳의 값이라는 말인데 해당 메모리 주소로는 엑세스가 불가능하기 때문에 Segmentation fault (core dumped) 에러가 발생하게 됩니다.
printf(“%c\n”, str);
마지막으로 tolower(str)에서 받은 97 정수값인 ‘a’ 캐릭터를 출력합니다.
<< 다음 | 혼자 공부하는 C언어 | 이전 >> |
반응형
'프로그래밍 > C' 카테고리의 다른 글
C언어 문자열 (String) (0) | 2019.11.08 |
---|---|
C언어 배열 (Array) (0) | 2019.11.05 |
C언어 반복문 (Loop) (0) | 2019.09.25 |
C언어 Switch 조건문 사용법 (0) | 2019.09.25 |
C언어 조건문 (if) (0) | 2019.09.19 |