C언어 : 9. 배열과 문자열

2026. 5. 26. 12:13·C/Study

안녕하세요.

이번에는 배열을 정리하고, 배열의 특수한 형태인 문자열을 정리하겠습니다.

 

1. 배열

더보기

 1) 의미

  • 하나의 같은 데이터형을 가진 데이터를 연속된 메모리 공간에 저장하는 자료구조 입니다.

 2) 기본 구조

  • int 라는 데이터형 변수 5개를 메모리에 생성합니다.
  • 배열의 인덱스는 0 부터 시작합니다.
int nums[5];
// nums[0] : 첫번째
// nums[1] : 두번째
// nums[2] : 세번째
// nums[3] : 네번째
// nums[4] : 다섯번째

 


3) 선언

  • 배열을 사용하기 위해서는 컴파일러에게 사용할 배열의 데이터형과 크기를 알려야 합니다.
  • 이를 배열 선언이라고 합니다.
데이터형 배열이름[크기];

int nums[100];
char name[20];
double lengths[30];

└ nums 는 int 형 배열이고, 크기는 100 입니다.

└ name 은 char 형 배열이고, 크기는 20 입니다.

└ lengths 는 double 형 배열이고, 크기는 30 입니다.


 

 4) 초기화

  • 배열에 데이터를 처음 입력하는 경우입니다.
  • 위의 선언만으로는 배열 변수에 누구도 알 수 없는 쓰레기 값(garbage value)이 들어가 있습니다.
  • 따라서 사용할 데이터로 배열을 초기화하는 것이 중요합니다.
데이터형 배열이름[크기] = {원소1, 원소2, ... };

int nums[5] = {1, 2, 3, 4, 5};

└ 배열의 고정크기 선언으로써, 데이터에 중괄호({~})를 감싸 초기화 할 수 있습니다.

int nums[5] = {1, 2};

// {1, 2, 0, 0, 0};

└ 배열의 일부만 초기화 할 수 있습니다. 이 경우 나머지는 0 으로 초기화 됩니다. 

데이터형 배열이름[] = {원소1, 원소2, ... };

int nums[] = {1, 2, 3};

└ 가변길이 초기화를 하는 경우 입니다. 이 경우 배열의 크기를 입력하지 않아도 크기를 자동으로 추론합니다.


 

 5) 접근

  • n 크기의 배열은 0(첫번째) 부터 n-1(마지막) 까지의 인덱스로 접근할 수 있습니다.
  • 접근하여 값을 변경하거나, 배열의 값을 다른 변수에 대입할 수 있습니다.
// 인덱스 0 부터 4 까지 접근이 가능하다.
int nums[5] = {1, 2, 3, 4, 5};

배열이름[인덱스];
nums[4] = 6; // 마지막 인덱스에 정수 6을 대입
int num = nums[2]; // 세번째 인덱스인 3을 변수 num에 대입

1.1 다차원 배열

더보기

 1) 의미

  • 다차원 배열이란 원소로 또 다른 배열을 갖는 배열을 말합니다.
  • 다차원 배열의 기초 형태인 2차원 배열을 보통 사용합니다.
  • 표, 좌표, 행렬 등을 표현할 때 주로 사용됩니다.

 2) 기본 구조(2차원 배열)

int fiveYears[5][12];

//    0 1 2 3 4 5 6 7 8 9 10 11 12 
// 0
// 1
// 2
// 3
// 4

└ 12 크기의 배열을 원소로 가지는, 5 크기의 배열이라고 할 수 있습니다.

└ 2차원 배열에서 첫번째 크기를 행, 두번째 크기를 열이라고 생각하면 배열을 시각적으로 파악할 수 있습니다.


 

3) 선언

데이터형 배열이름[크기1][크기2];

int arr[2][3];

└ 위 처럼 행이 2, 열이 3 인 배열을 선언할 수 있습니다.


 

4) 초기화

데이터형 배열이름[크기1][크기2] =
{
    {원소1, 원소2 ... },
    {원소1, 원소2 ... },
    {원소1, 원소2 ... },
    ....,
};

int arr[2][3] =
{
    {1, 2, 3},
    {4, 5, 6}
};

└ 기존 배열의 초기화처럼 중괄호를 사용합니다.

└ 3 크기의 배열을 먼저 중괄호로 초기화하고, 이를 감싸는 2 크기의 배열을 중괄호로 초기화 합니다.

데이터형 배열이름[크기1][크기2] = {원소1, 원소2, 원소3, ... };

int arr[2][3] = {1, 2, 3, 4, 5, 6};

└ 위 처럼 한 줄로도 초기화 할 수 있습니다.

└ 이는 2차원 배열 또한 메모리에는 1차원으로 연속되어 저장되기 때문입니다.


5) 접근

  • 다차원 배열의 접근은 처음 크기부터 차례대로 접근할 수 있습니다.
arr[2][3] =
{
    {1, 2, 3},
    {4, 5, 6}
};


배열이름[인덱스1][인덱스2];

arr[0][2] = 7; // 첫번째 인덱스 0(첫번째 = {1, 2, 3})의 2(세번째 = {3}) 원소에 접근
int num = arr[1][0]; // 첫번째 인덱스 1(두번째 = {4, 5, 6})의 0(첫번째 = {4}) 원소에 접근

 


2. 문자열

더보기

1) 배열과의 관계

  • 문자열은 데이터형이 char 인 배열입니다.

2) 선언과 초기화

char hello[11] = "HelloWorld";

└ 문자 배열의 가장 기본적인 고정크기 선언으로써 크기를 지정해주는 경우 입니다.

char hello[] = "HelloWorld";

└ 문자 배열의 가변크기 선언입니다. 크기를 지정하지 않아도 크기를 추론합니다.


3) 널(NULL) 문자

  • 널 문자란 문자열의 종료를 표시하는 문자입니다.
  • 위 선언에서 고정크기 배열을 선언하는 경우, 문자열에 있는 문자의 수는 10 이기 때문에 크기는 10이 되어야 하는데 11로 되어 있는 것을 볼 수 있습니다. 이는 문자열의 끝을 표현하기 위한 널 문자를 추가하기 위함입니다.
char hello[15] = "HelloWorld";

// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
// H e l l o W o r l d \0 \0 \0 \0 \0

└ 문자의 끝 이후는 전부 널 문자를 대입합니다.


4) 문자열 접근 및 수정

char hello[20] = "HelloWorld";

hello[5] = C;
hello[6] = o;
hello[7] = u;
hello[8] = n;
hello[9] = t;
hello[10] = r;
hello[11] = y;

// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// H e l l o W o r l d \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
// H e l l o C o u n t  r  y \0 \0 \0 \0 \0 \0 \0 \0

5) 2차원 배열을 이용한 여러 문자열 저장

// 20 크기를 가진 문자열을 3개 저장
char fruits[3][20] =
{
    "Apple",
    "Banana",
    "Orange"
};

2.1 문자열 함수

더보기

0) 헤더파일

  • 문자열 대부분의 함수는 헤더파일 string.h 에 들어있습니다.
  • 따라서 C 파일 상단에서 이를 include 하고 진행하는 것이 좋습니다.
#include <string.h>

1) 문자열 출력

  • printf()
printf("%s\n", str);

└ %s 라는 형식 지정자는 NULL(\0) 문자가 나올 때까지 출력합니다.


2) 문자열 입력

  • scanf()
char str[100];

scanf("%s", str);

└ scanf() 가장 유명한 입력함수 입니다.

└ 다만 공백 입력이 불가하고, 크기가 작은 문자배열에 데이터 입력시 버퍼 오버플로우가되는 문제가 생기는 문제가 있습니다.

  • fgets()
char str[100];

fgets(buffer, buffer 크기, 표준입력);
fgets(str, sizeof(str), stdin);

└ 위의 문제를 해결하는 입력함수 입니다.

└ 공백 입력이 가능하고, 크기 제한을 두어 버퍼 오버플로우를 방지합니다.


 

3) 문자열 길이

  • strlen()
char str[] = "Hello";

printf("%d", strlen(str));

└ str 이라는 문자열의 크기를 출력합니다.

└ 이 경우 크기는 5가 되는데, NULL(\0) 문자의 크기는 포함되지 않음을 주의해야 합니다.


4) 문자열 복사

  • strcpy()
char src[] = "Hello";
char dest[20];

strcpy(피문자열, 저장할 문자열);
strcpy(dest, src);

└ src 의 문자열을 dest 라는 문자열에 복사합니다.

└ NULL(\0) 문자도 같이 복사됩니다.


 5) 문자열 이어붙이기

  • strcat()
char str[20] = "Hello ";

strcat(피문자열, 이어붙일 문자열);
strcat(str, "World");

printf("%s", str);

└ Hello 라는 문자열을 str 에 저장된 문자열 뒤에 이어 붙입니다.


6) 문자열 비교

  • strcmp()
strcmp(a, b);

strcmp("ABC", "ABC"); // 0
strcmp("ABC", "ABD"); // 음수("ABC" < "ABD")

└ 같다면 0을, 오른쪽 문자열이 크다면 양수, 왼쪽 문자열이 크다면 음수를 반환합니다.

└ 따라서 같을 때인 0을 기준하여 사용합니다.


7) 메모리 관련

  • memset()
char str[100];

memset(문자열, 값, 문자열 크기);
memset(str, 0, sizeof(str));

└ 문자열에 원하는 값으로 전부 초기화 할 때 사용합니다.

  • memcpy()
int src[3] = {1,2,3};
int dest[3];

memcpy(피문자열, 복사할 문자열, 복사할 문자열 크기);
memcpy(dest, src, sizeof(src));

└ 바이트 수 기준하여 모든 메모리를 복사할 때 사용합니다.

└ strcpy() 는 NULL(\0) 문자를 기준하여 복사하는 반면, memcpy() 는 전부 복사합니다.


8) 변환

  • atoi
int num = atoi("123");

└ 문자열을 정수형으로 변환할 때 사용합니다.

  • atof
double Pi = atof("3.14");

└ 문자열을 부동소수점형으로 변환할 때 사용합니다.

 

 

'C > Study' 카테고리의 다른 글

C언어 : 8. 함수  (0) 2026.05.25
C언어 : 7. 분기 제어문  (0) 2026.05.19
C 언어 : 6. 루프 제어문  (0) 2026.05.19
C언어 : 5. 연산자  (0) 2026.05.19
C언어 : 4. 문자열과 입출력  (0) 2026.05.18
'C/Study' 카테고리의 다른 글
  • C언어 : 8. 함수
  • C언어 : 7. 분기 제어문
  • C 언어 : 6. 루프 제어문
  • C언어 : 5. 연산자
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
C언어 : 9. 배열과 문자열
상단으로

티스토리툴바