728x90
반응형
SMALL
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char temp[80];
char *str[3];
int i;
for (i = 0; i< 3; i++){
printf("write string : ");
gets(temp);
str[i] = (char * )malloc(sizeof(strlen(temp) + 1));
strcpy(str[i], temp);
}
for (i = 0; i< 3; i++){
printf("%s\n", str[i]);
}
for (i = 0 ; i< 3; i++){
free(str[i]);
}
return 0;
}
1. **문자열 입력 받기**:
- 사용자로부터 3개의 문자열을 입력 받습니다. 각 문자열은 `temp` 배열을 통해 임시로 저장됩니다.
- **주의**: `gets()` 함수는 안전하지 않습니다(버퍼 오버플로우 취약성이 있습니다). `fgets()` 함수로 대체하는 것이 좋습니다.
2. **동적 메모리 할당**:
- `str[i] = (char *)malloc(sizeof(strlen(temp) + 1));`에서 `strlen(temp) + 1`는 입력받은 문자열의 길이에 널 종료 문자(`\0`)를 포함한 크기를 계산합니다. 그러나 `sizeof` 연산자는 잘못 사용되었습니다. `sizeof`는 타입이나 타입의 인스턴스의 크기를 바이트 단위로 반환하는 연산자이므로, 이 경우에는 `strlen(temp) + 1` 자체가 필요한 바이트 수를 제공합니다.
- 올바른 코드는 `str[i] = (char *)malloc(strlen(temp) + 1);`입니다.
3. **문자열 복사**:
- `strcpy(str[i], temp);`를 사용하여 `temp`에 저장된 문자열을 `str[i]`가 가리키는 메모리 공간에 복사합니다.
4. **문자열 출력**:
- 입력받고 메모리에 저장된 각 문자열을 출력합니다.
5. **메모리 해제**:
- 할당된 메모리는 더 이상 필요하지 않으므로 `free(str[i]);`를 사용하여 해제합니다.
728x90
반응형
LIST
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 17) 공동체를 사용한 학번과 학점 데이터 처리 (0) | 2024.09.26 |
---|---|
chapter 17) typedef 를 사용한 자료형 재정의 (0) | 2024.09.25 |
chapter 16) 동적 하랑한 저장 공간을 사용하는 프로그램 (0) | 2024.09.23 |
chapter 16) 동적 할당 영역의 문자열을 함수로 출력 (0) | 2024.09.22 |
chapter 16) 동적 할당 영역을 배열처럼 사용 (0) | 2024.09.21 |