해결된 질문
작성
·
24
0
정답에서 3항 연산결과를 바로 printf 로 뽑아내는것을 보여주셨는데, 그렇다면 연산결과("합격,불합격" 문자열)은 어디에 저장되어서 출력하는건가요?? 제 생각에는 버퍼나 특정저장공간을 만들어 넣은다음에 뽑을것 같은대.. 디버그 모드에서도 보이지가 않아서 궁금합니다
답변 2
0
우선 아주 좋은 질문이라는 점 말씀드립니다. 😄
C언어에서 문자열 상수는 읽기 전용 정적 메모리 공간에 저장된 char[] 입니다. 상수화 된 것이므로 const char[]로 봐야 하겠습니다.
그리고 문자열 값 자체는 .exe 파일을 빌드할 때 .exe 파일(PE format)에 담기며 실행 시 읽기 전용 정적 메모리 공간에 로드됩니다. const char[]이므로 0번 요소의 메모리 주소로 식별합니다. 이 때문에 %s 형식 문자로 출력한 것입니다. 참고하시기 바랍니다. 😄
문자열 상수는 컴파일 타임에 필요한 메모리 공간이 계산됩니다. 가령 "Hello"는 const char[6]으로 명확히 형식을 정의할 수 있습니다. 물론 공간의 크기가 무한정 늘어날 수는 없습니다. 그 크기의 제한은 직접 확인해본적은 없으나 PE 파일 이미지가 로드될 수 있는 수준으로 한정될 것입니다. 그 중에서도 PE 파일을 구성하는 섹션 단위의 최대 크기로 제한 될 수 있을 것 같습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. giup gun님께서 질문하신 3항 연산자의 결과와 관련하여 간단히 설명드리겠습니다.
3항 연산자를 사용하여 ‘합격’과 ‘불합격’ 문자열을 출력하는 방식은 다음과 같은 동작을 거칩니다:
#include <stdio.h>
int main(void) {
int score = 85; // 예제 점수
printf("%s\n", (score >= 80) ? "합격" : "불합격");
return 0;
}
3항 연산자 사용:
(score >= 80) ? "합격" : "불합격"
구문은 score
의 값이 80 이상인지 확인합니다."합격"
, 거짓이면 "불합격"
이라는 문자열이 선택됩니다.즉시 출력:
printf
함수에 직접 전달됩니다.printf
의 인수로 즉시 사용되어 출력됩니다.printf
함수에 전달되는 것입니다.메모리 할당:
printf
에 넘겨주는 과정입니다.이와 관련된 유사한 질의와 답변은 학교와 관련 강의의 댓글이나 자료에서도 확인하실 수 있습니다. 이는 일시적인 메모리 상수로서 큰 문제없이 활용 가능한 부분입니다.
참고하실 만한 유사한 질문과 답변 링크는 여기에서 확인하실 수 있습니다: [섹션10 연산자] 필수 실습 문제 합격, 불합격 판단하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다. 😋
추가로 궁금한것이 문자열 상수가 읽기 전용 정적 메모리 공간에 저장된다고 하셨는데, 별도 메모리 공간의 선언 없이 문자열 상수를 무한히 저장 할 수는 없을것 같습니다.
const char[]의 최대의 크기는 빌드하는 PC의 메모리 크기와 비례해서 커지는건가요 아니면 제한 되어있는건가요??