[c언어 기초]

우리가 아는 C언어

[c언어 기초] 우리가 아는 C언어

문자열형 변수와 논리변수

변수와 실수 그리고 자료형의 이해

문자열형 변수

문자열형 변수는 문자형 변수와 유사하지만 저장과 계산의 효율성을 위해 몇 가지 규칙이 포함되어 있습니다.

아래의 코드를 직접 작성하고 실행해 봅시다.

#include <stdio.h> 
main () 
{ 
    char a[5] = { 'K', 'O', 'R', 'E', 'A',}; 
    printf ( "%c\n", a[1]); 
    printf ( "%s\n", a); 
    char b[6] = { 'K', 'O', 'R', 'E', 'A', '\0'}; 
    printf ( "%s\n", b); 
    char c[6] = "KOREA"; 
    printf ( "%s\n", c); 
}

  실행결과

위 프로그램을 실행하면 일정한 메모리 공간에 해당하는 문자를 출력합니다.

  • 5행에서 a[1]은 ‘O’를 출력하게 됩니다. 따라서 a[0]는 ‘K’, a[2]는 ‘R’이라는 것을 알 수 있죠.
  • 6행에서 a를 출력하면 “KOREA”를 모두 출력하게 됩니다. 하지만 우리가 지정한 a[5]는 7행과 달리 종료 문자 없이 출력되므로, ‘K’에서 시작하지만 끝을 알 수 없기 때문에 다른 문자들이 함께 출력됩니다.
  • 7행은 b[6] 문자열형 변수에 문자열형 변수 값의 끝을 의미하는 종료(null)문자 ‘\0’이 포함되어 8행에서 정확한 결과가 출력됩니다. 또한 종료 문자를 널(null)문자라고 불르기도 합니다.
  • 9행은 입력의 불편함을 막기 위해 출력할 문자를 모두 입력하는 방법으로, 널 문자가 자동적으로 입력됩니다.

문자열형 변수는 여러 문자를 저장하기 위해서 여러 개의 메모리 공간을 연속적으로 할당받아 한 문자씩 저장하게 됩니다.(a[ ], b[ ]등) 문자열형 변수를 저장할 때는 변수명 뒤에 필요한 공간의 크키를 적어야 하는데, 저장하고자 하는 문자열 상수의 길이보다 하나 큰 공간을 할당해야합니다.
(즉 KOREA일 경우 a[5]가 아닌 종료문자가 포함될 수 있도록 a[6]이라고 해야 합니다.)

논리변수

C 언어에서는 ‘참’과 ‘거짓’의 논리 상수값을 저장하는 변수를 사용할 수 있습니다. 일반적으로 논리값은 ‘크다’, ‘작다’와 같은 비교 연산의 결과이죠. 

아래의 코드를 직접 작성하고 실행해 봅시다.

#include <stdio.h> 
#include <stdbool.h> 
main () 
{ 
    bool a = false; 
    bool b = 25; 
    printf ( "%d %d \n", a, 0); 
    printf ( "%d %d \n", b, true); 
}
실행결과
어? 헤더 파일이 2개가 사용되었네요? 또한 자료형이 int나 char 대신 bool이 사용되었습니다.
  • bool자료형을 사용하기 위해서 헤더 파일 #include <stdbool.h>가 필요합니다.
  • bool은 논리 자료형 이라고도 하며 참과 거짓을 나타내는 데 사용합니다.
  • 5행에서 논리 변수 a에 거짓(false, 0)이 저장됩니다.
  • 6행에서 b에는 25를 저장하였지만 논리 변수에 저장할 때 1(true)로 바꾸어 저장됩니다. 따라서 6행과 7행에서 각각 ‘0, 0’과 ‘1, 1’이 출력되죠.
  • 논리값을 의미하는 논리 상수인 참(true), 거짓(false)은 1(참) 또는 0(거짓)으로 바뀌어 저장되며, 0 이외의 모든 수는 참(true)으로 인식됩니다.

#include <stdbool.h> – bool, true, false가 정의된 헤더 파일

다음 토픽에서는 변수 이름의 작성 규칙과 C프로그램의 기본구조에 대해 알아봅시다.

 

 

 

댓글

댓글 본문
  1. thebluerat
    감사합니다.
  2. 강동혁
    저도 그렇게 나왔는데 업데이트된 프로그램상에서 자동으로 수정되는 기능이 추가된건 같습니다.
    대화보기
    • char a[5] = { 'K', 'O', 'R', 'E', 'A',};
      printf ( "%s\n", a); //이 부분의 출력값도
      KOREA"가 아니라 다른 것과 마찬가지로 KOREA 라고 나왔습니다 ㅠㅠ
      혹시 버전이 다르면 결과값이 달라질수도있나요...?
      clang version 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final)
    • Noir
      잘봤습니다!
    • 어흥zz
      감사합니다
    버전 관리
    life knowledge
    현재 버전
    선택 버전
    graphittie 자세히 보기