C 언어 기초

char s[10] = "hello";
printf("%zu %zu\n", strlen(s), sizeof s);

문자열을 넣은 char 배열에 대해, 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A5 10
  2. B6 10
  3. C10 10
정답과 해설 보기

정답: A. 5 10

C 언어의 문자열은 문자의 나열 끝에 종단 문자 '\0'을 둔 것입니다. strlen은 처음부터 '\0' 바로 앞까지의 문자 수를 세므로 "hello"에서는 5가 됩니다. sizeof s는 배열 s 전체의 크기로, 선언한 요소 수인 10바이트입니다(나머지 요소에는 0이 들어갑니다). char s[] = "hello";처럼 요소 수를 생략하면 '\0'을 포함한 6바이트 배열이 됩니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. 위의 선언 다음에 ㄱ "p = t;", ㄴ "*p = 'x';", ㄷ "q = t;", ㄹ "*q = 'x';" 중 하나를 쓴다. 컴파일 오류가 되는 것의 조합은?
  2. 함수 포인터 배열을 사용한 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?
  3. fill과 use는 따로 정의된 함수로 한다. 위의 함수의 문제점으로 올바른 것은?
  4. 위의 함수 make가 반환하는 포인터에 대해 올바른 것은?
  5. C 언어에서 free(p); 바로 다음에 p = NULL;이라고 쓰는 것이 권장되는 이유로 가장 적절한 것은?