개발자
인스타 릴스보다가 봤는데용 이게 왜 cba로 나오는지 설명해주시면 감사하겠습니다!!!
답변 1
인기 답변
삭제된 사용자
2024년 02월 21일
안녕하세요. 부족한 지식을 동원해보자면,,(틀릴 수도 있습니다.) 4번 코드의 'abc'는 문자열이 아닌 multi-character constant로 int값으로 변환됩니다. 그런데 이 multi-character constant가 저장되는 방식이 컴파일러, OS, 아키텍처 등의 구현에 따라 결정됩니다. 위 사진은 little-indian 방식을 따른 것으로 보입니다. 그러므로 가장 작은 자릿수인 c가 아스키코드에 따라 변환된 1byte 숫자가 가장 작은 주소에 저장되며, 순서대로 b, a가 저장됩니다. 그런데 %s 서식지정자로 &c를 읽는다면 c에 저장된 값을 char 배열로 읽게 됩니다. 그러므로 가장 작은 주소부터 byte 단위로 끊어 읽게 되며 cba가 됩니다. 추가로, c의 값을 %x 서식지정자(16진수)로 출력해보시면 616263이 출력됩니다. 61, 62 63은 각각 a, b, c의 아스키코드 숫자값입니다. **추가: 참고로 이전 단락에서 말씀드린 것처럼 'abc'=0x616263입니다. 즉, 3개의 문자에 대한 값을 저장한 후 상위 8bit는 0으로 패딩된 것이죠. 그래서 문자열로 읽을 때 a까지 출력하고 널 문자를 읽은 게 돼서 printf가 정상 종료됩니다. 아래 자료 참고 바랍니다. Multi-character literal : https://www.geeksforgeeks.org/multi-character-literal-in-c-cpp/ 첫번째 답변에 환경 별로 multi-character constant 값 비교 : https://stackoverflow.com/questions/6944730/multiple-characters-in-a-character-constant 도움이 되셨길 바랍니다.
익명
작성자
2024년 02월 21일
감사합니다!!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!