인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

giup gun님의 프로필 이미지
giup gun

작성한 질문수

독하게 시작하는 C 프로그래밍

[필수 실습 문제] 합격, 불합격 판단하기

[필수연습문제] 합격, 불합격 여부 판단하기 질문있습니다.

해결된 질문

작성

·

24

0

정답에서 3항 연산결과를 바로 printf 로 뽑아내는것을 보여주셨는데, 그렇다면 연산결과("합격,불합격" 문자열)은 어디에 저장되어서 출력하는건가요?? 제 생각에는 버퍼나 특정저장공간을 만들어 넣은다음에 뽑을것 같은대.. 디버그 모드에서도 보이지가 않아서 궁금합니다

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

우선 아주 좋은 질문이라는 점 말씀드립니다. 😄

C언어에서 문자열 상수는 읽기 전용 정적 메모리 공간에 저장된 char[] 입니다. 상수화 된 것이므로 const char[]로 봐야 하겠습니다.

그리고 문자열 값 자체는 .exe 파일을 빌드할 때 .exe 파일(PE format)에 담기며 실행 시 읽기 전용 정적 메모리 공간에 로드됩니다. const char[]이므로 0번 요소의 메모리 주소로 식별합니다. 이 때문에 %s 형식 문자로 출력한 것입니다. 참고하시기 바랍니다. 😄

giup gun님의 프로필 이미지
giup gun
질문자

답변 감사합니다. 😋

추가로 궁금한것이 문자열 상수가 읽기 전용 정적 메모리 공간에 저장된다고 하셨는데, 별도 메모리 공간의 선언 없이 문자열 상수를 무한히 저장 할 수는 없을것 같습니다.
const char[]의 최대의 크기는 빌드하는 PC의 메모리 크기와 비례해서 커지는건가요 아니면 제한 되어있는건가요??

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

문자열 상수는 컴파일 타임에 필요한 메모리 공간이 계산됩니다. 가령 "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;
}

설명:

  1. 3항 연산자 사용:

    • 위 코드의 (score >= 80) ? "합격" : "불합격" 구문은 score의 값이 80 이상인지 확인합니다.
    • 조건이 참이면 "합격", 거짓이면 "불합격"이라는 문자열이 선택됩니다.
  2. 즉시 출력:

    • 여기서 중요한 점은 선택된 문자열이 변수에 저장되지 않는다는 것입니다. 대신에 선택된 문자열이 printf 함수에 직접 전달됩니다.
    • 즉, “합격” 또는 “불합격” 문자열은 printf의 인수로 즉시 사용되어 출력됩니다.
    • 메모리나 버퍼에 따로 저장되지 않고, 메모리에 상수 형태로 존재하며, 그 포인터가 printf 함수에 전달되는 것입니다.
  3. 메모리 할당:

    • C에서는 문자열 리터럴은 프로그램의 데이터 섹션에 저장됩니다. 이는 코드 상에서 직접 사용되는 상수 문자열이므로, 특정 변수가 아니라 프로그램 실행 중 메모리의 특정 영역에 그대로 저장되어 있습니다.
    • 문자열이 저장될 별도의 버퍼나 변수를 사용하지 않아도 됩니다. 그저 메모리에서 이 문자열의 주소를 printf에 넘겨주는 과정입니다.

이와 관련된 유사한 질의와 답변은 학교와 관련 강의의 댓글이나 자료에서도 확인하실 수 있습니다. 이는 일시적인 메모리 상수로서 큰 문제없이 활용 가능한 부분입니다.

참고하실 만한 유사한 질문과 답변 링크는 여기에서 확인하실 수 있습니다: [섹션10 연산자] 필수 실습 문제 합격, 불합격 판단하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

giup gun님의 프로필 이미지
giup gun

작성한 질문수

질문하기