이제막 배우기 시작했는데 배우면서 궁금한게 있어서 물어봐
단순 출력을 원하는거면 ("%c\n", 'a'); 든 ("%s\n", "a"); 든 똑같은 출력값이 나올텐데 문자와 문자열을 나누는 이유가 궁금해
9개의 댓글
무분별한 사용은 차단될 수 있습니다.
이제막 배우기 시작했는데 배우면서 궁금한게 있어서 물어봐
단순 출력을 원하는거면 ("%c\n", 'a'); 든 ("%s\n", "a"); 든 똑같은 출력값이 나올텐데 문자와 문자열을 나누는 이유가 궁금해
개붕이는끝
"a"와 'a'는 다름
'a'는 1바이트짜리 정수고
"a"는 'a'와 0이 연속적으로 있는 배열의 주소값이야
이 때문에 문자열 포맷팅할 때 그 방법이 다르게 나오니 따로 구분짓는 것임
코싸멘뚜
아 무슨말인지 이해했어 그래서 하기전에 진법이랑 이것저것 설명했던거구나 단순출력값만 생각하면 안되는거였네 호기심해결!!!
수능백번보면백수
c언어가 문자를 출력하는 방법을 문자와 문자열 2가지 방법으로 나누지 않고 문자열로만 지정하면 더 편할 것 같은데 굳이 구분하는 이유가 궁금한거지?
c언어가 나올 당시에는 메모리가 제한적이어서 조금이라도 아낄 필요가 있었기 때문에 나눠놓은거야
문자를 출력하려면 시스템이 메모리에 접근해 데이터를 읽어와 출력하겠지?
그런데 문자는 시스템에게 메모리 어디에 있는거 하나만 읽어와 출력하라고 하면 되지만,
문자열은 배열의 형태로 메모리에 연속되어 저장되어 있으니 시스템에게 메모리의 어디서부터 어디까지 읽어야하는지 알려줄 필요가 있어
그런데 매번 문자열의 크기를 지정하기는 어렵잖아
그래서 문자열의 끝을 알리기 위해 \0을 포함하기로 했어
시스템에게 메모리 어디서부터 \0을 만날때까지 읽어와라고 명령하게 된거지
그래서 만약 a를 문자열로 저장하면 실제 메모리에 저장되는 배열은 a\0가 되는거지
문자 a만 저장할 때와 다르게 \0가 메모리 한자리를 더 차지하게 되는 데 이걸 아끼려고 문자와 문자열을 구분짓게 한 거야
메모리 1번지를 읽어와 랑
메모리 1번지부터 \0을 만날때까지 읽어와 라는 연산의 차이를 아끼려는 것도 있어
코싸멘뚜
지금도 그 구분이 의미가 있는거야? 귀찮을땐 그냥 %s 로 퉁쳐버려도 되는거야?
수능백번보면백수
그렇게해도 프로그램 작동 자체에는 무관하긴 해
실제로 파이썬은 문자와 문자열의 구분이 없어
코싸멘뚜
아하 100점짜리 설명 감사합니다!
멍멍이
섹시해
OutOfMemory
char하나뿐이라면, %s로 쓰면 \0나올 때 까지 계속 읽어서 char 뒤가 NULL이 아니라면 이상한 값이 튀어나와서 머리 싸매야하는 일이 생길 수 있어. 앵간하면 자료형 구분해서 써
사삿삭
스트링 뒤에 공간있어요