복습: 동적 문자열 연결
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 61번째.
챌린지
쉬움텍스트 처리 유틸리티를 구축하기 위해 동적 문자열 연결 함수를 구현하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 다음과 같은
concatenateStrings함수를 작성합니다:str1과str2라는 이름의 두 개의char*매개변수를 받습니다.- 동적으로 할당된 문자열을 가리키는
char*를 반환합니다. - 두 문자열과 널 종료 문자(null terminator)를 포함하여 필요한 총 메모리를 계산합니다.
malloc()을 사용하여 필요한 정확한 양의 메모리를 할당합니다.- 메모리 할당이 성공했는지 확인합니다 (할당 실패 시 NULL 반환).
strcpy()를 사용하여 첫 번째 문자열을 할당된 메모리에 복사합니다.strcat()을 사용하여 두 번째 문자열을 결과에 추가합니다.- 새로 생성된 연결된 문자열에 대한 포인터를 반환합니다.
- 다음과 같은
processText함수를 작성합니다:- 세 개의
char*매개변수word1,word2,separator를 받습니다. - 동적으로 할당된 문자열을 가리키는
char*를 반환합니다. - word1 + separator + word2 형식의 결합된 문자열을 생성합니다.
- 먼저
concatenateStrings를 호출하여word1과separator를 결합합니다. - 그런 다음
concatenateStrings를 다시 호출하여 결과에word2를 추가합니다. - 중간 메모리 할당을 적절하게 해제(free)합니다.
- 최종 연결된 결과를 반환합니다.
- 세 개의
- main 함수에서:
- 각각 크기가 50인 세 개의 문자 배열
firstWord,secondWord,connector를 선언합니다. - 입력으로부터 첫 번째 단어, 두 번째 단어, 연결자를 나타내는 세 개의 문자열을 읽습니다.
- 이 세 문자열을 사용하여
processText함수를 호출합니다. - 반환된 포인터가 NULL이 아닌지 확인합니다.
- 성공하면
Result: [concatenated_string]와 같은 정확한 형식으로 결과를 출력합니다. - 메모리 할당이 실패하면
Memory allocation failed를 출력합니다. - 결과 문자열의 길이를
Length: [length]와 같은 정확한 형식으로 계산하여 출력합니다. - 동적으로 할당된 메모리를 해제(free)합니다.
- 각각 크기가 50인 세 개의 문자 배열
이 챌린지는 동적 메모리 할당, 문자열 조작 함수, 포인터 반환 값 및 적절한 메모리 관리에 대한 숙련도를 테스트합니다. 메모리 요구 사항 계산, malloc() 및 free() 사용, 여러 문자열 함수 작업, 메모리 할당 실패 처리를 연습하게 됩니다. 이 챌린지는 동적 할당을 통해 함수가 자신의 범위를 벗어나서도 유지되는 데이터를 생성하고 반환하는 방법을 보여줍니다.
직접 해보기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: 여기에 concatenateStrings 함수를 작성하세요
// TODO: 여기에 processText 함수를 작성하세요
int main() {
// 입력 읽기
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: 아래에 코드를 작성하세요
// processText 함수를 호출하고 결과를 처리하세요
return 0;
}