본문 바로가기
개념/혼자 공부하는 C언어

chapter 16) 동적 할당 영역의 문자열을 함수로 출력

by kiseno 2024. 9. 22.
728x90
반응형
SMALL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void print_str(char **ps);

int main(void){
    char temp[80];
    char *str[21] = { 0 };
    int i = 0;

    while ( i < 20 ){
        printf("WRITE STRING : ");
        gets(temp);
        if (strcmp(temp, "end") == 0) break;
        str[i] = (char *)malloc(sizeof(strlen(temp) +1));
        strcpy(str[i], temp);
        i++;
    }
    print_str(str);
    for (i = 0; str[i] != NULL; i++){
        free(str[i]);
    }

    return 0;
}

void print_str(char **ps){
    while(*ps != NULL){
        printf("%s\n", *ps);
        ps++;
    }
}

 

### 코드 세부 사항

- 사용자로부터 문자열을 받아 `temp` 배열에 저장합니다. `gets()` 함수를 사용하는데, 이는 더 이상 안전하지 않으며 사용을 권장하지 않습니다. 대신 `fgets(temp, sizeof(temp), stdin)`을 사용하고, `fgets`로 받은 문자열 끝의 개행 문자를 제거하는 것이 좋습니다.
- 입력받은 문자열이 "end"와 같은지 비교하여, 같으면 입력을 중단합니다.
- `str[i]`에 동적 메모리를 할당하여 `temp`의 내용을 복사합니다. 메모리 할당 크기를 계산할 때 `sizeof` 연산자는 잘못 사용되었습니다. 올바르게는 `strlen(temp) + 1`을 사용해야 합니다.
- `print_str` 함수는 `str` 배열에 저장된 모든 문자열을 출력합니다. 이 함수는 `char **ps` 포인터 배열을 인자로 받으며, 배열의 각 요소(문자열)를 출력합니다.
- 마지막으로, 할당된 모든 메모리는 `free` 함수를 사용하여 해제됩니다.

728x90
반응형
LIST