강의

멘토링

커뮤니티

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

asdf님의 프로필 이미지
asdf

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

배열과 문자열

문자열 배열 강의자료

해결된 질문

작성

·

25

0

C 배열과 문자열 자료에서 문제열 배열 부분 2차원으로 안 되어 있고 char stringArray[20]이라고만 되어있는데 무조건 2차원이어야하나요?

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 영상에서 몇 분 몇 초인지 말씀 부탁드립니다.

혹시 학습 자료를 말씀하시는 걸까요?

asdf님의 프로필 이미지
asdf
질문자

주말코딩님의 프로필 이미지
주말코딩
지식공유자

아! 문자열을 요소로 같은 배열에 오타가 있네요. 수정하도록 하겠습니다.

 

C언어에서 배열에 문자열 넣는 방식은 2차원으로 해야합니다.

아니면 문자열의 시작을 가리키는 시작주소로 해야합니다.

 

1. 이차원 배열

// 방법 1-1: 선언과 동시에 초기화
char fruits[3][20] = {"apple", "banana", "orange"};

// 방법 1-2: 크기 자동 지정
char colors[][10] = {"red", "blue", "green"};

// 방법 1-3: 개별 초기화
char names[3][20];
strcpy(names[0], "Alice");
strcpy(names[1], "Bob");
strcpy(names[2], "Charlie");

 

2. 포인터로 배열 안의 요소 시작점 가리키기

// 방법 2-1: 문자열 리터럴 사용 (읽기 전용)
char *animals[3] = {"cat", "dog", "bird"};

// 방법 2-2: const 명시
const char *days[] = {"Monday", "Tuesday", "Wednesday"};

// 방법 2-3: 초기화 없이 선언 후 할당
char *cities[3];
cities[0] = "Seoul";
cities[1] = "Tokyo";
cities[2] = "Beijing";

 

2. 동적 메모리 할당 방식 (가능하긴 하지만, 시험에 나온 적은 없음)

// 방법 3-1: malloc으로 포인터 배열 생성
char **words = (char **)malloc(3 * sizeof(char *));
words[0] = (char *)malloc(20 * sizeof(char));
words[1] = (char *)malloc(20 * sizeof(char));
words[2] = (char *)malloc(20 * sizeof(char));
strcpy(words[0], "Hello");
strcpy(words[1], "World");
strcpy(words[2], "C");

// 사용 후 반드시 해제
free(words[0]);
free(words[1]);
free(words[2]);
free(words);

// 방법 3-2: strdup 사용 (더 간편)
char **items = (char **)malloc(3 * sizeof(char *));
items[0] = strdup("item1");  // 문자열을 복사하여 할당
items[1] = strdup("item2");
items[2] = strdup("item3");

// 해제
free(items[0]);
free(items[1]);
free(items[2]);
free(items);

 

정보처리기사 수준의 시험에서는 1번하고 2번만 알고 계시면 되겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. asdf님.

문자열 배열에 대해 문의 주셨군요. C 언어에서 문자열을 저장하기 위해 꼭 2차원 배열을 사용할 필요는 없습니다. 문자열은 문자들의 배열로 표현되며, 이때 문자열을 저장하기 위한 배열이 1차원 배열이면 충분합니다. 즉, char stringArray[20]라는 선언은 길이 20의 문자열을 저장할 수 있는 1차원 배열을 선언한 것이며 충분히 올바른 방식입니다.

  • 1차원 배열 (예: char stringArray[20]): 문자열 하나를 저장하기 위한 배열로, 각 인덱스에 개별 문자가 저장됩니다. 배열의 크기는 저장할 문자열의 최대 길이를 설정하며, 널 문자(\0) 포함을 고려해야 합니다.

  • 2차원 배열 (예: char stringArray[5][20]): 여러 문자열을 저장할 때 사용됩니다. 각 “행”이 문자열에 대응하고 각 “열”이 개별 문자를 저장하게 됩니다. 이 방식은 여러 개의 문자열을 다룰 때 유용합니다.

문자열 배열의 차이와 사용 방식에 대해 좀 더 자세한 설명을 원하신다면, 아래와 같은 질문도 참고하시길 권장드립니다:

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

asdf님의 프로필 이미지
asdf

작성한 질문수

질문하기