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
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 16) 3개의 문자열을 저장하기 위한 동적 할당 (0) | 2024.09.24 |
---|---|
chapter 16) 동적 하랑한 저장 공간을 사용하는 프로그램 (0) | 2024.09.23 |
chapter 16) 동적 할당 영역을 배열처럼 사용 (0) | 2024.09.21 |
chapter 16) 구조체를 선언하고 멤버를 사용하는 방법 (0) | 2024.09.20 |
chapter 16) calloc, realloc 함수를 사용한 양수 입력 (0) | 2024.09.19 |