반응형
c언어 동적할당 - 문자열 (문자배열 character array)
문자배열(문자열)을 동적으로 할당한 텍스트(text) 구조체를 저장
필요한 함수: 텍스트 구조체 생성; 문자열 길이; 문자열 복사; 메모리해제 함수
구조체 선언
// 문자 배열을 동적으로 할당한 텍스트 구조체 저장
struct text {
int capacity;
char *string;
};
// 텍스트 구조체
typedef struct text text;
|
복사한 문자열을 가지고 있는 텍스트(text) 구조체 생성
// 복사한 문자열을 가지고 있는 새로운 텍스트 구조체 생성
text *newText(char *str) {
// 구조체 메모리 할당
text *t = malloc(sizeof(text));
// 기본 문자열 메모리 설정
t->capacity = 24;
// null counter를 고려한 문자열의 길이에 따라 메모리를 할당
while (t->capacity < stringLength(str) + 1) t->capacity *= 2;
// 기본 문자열 메모리 할당
t->content = malloc(t->capacity);
// 복사한 문자열을 text 구조체에 저장
stringCopy(t->content, str);
return t;
}
|
문자열 길이
// 문자열 길이 반환
int stringLength(char *str) {
int len = 0;
for (int i = 0; str[i] != '\0'; i++) len++;
printf("Length of string '%s': %d\n", str, len);
return len;
}
|
문자열 복사
// str2 문자열을 str1에 복사
void stringCopy(char *str1, char *str2) {
int len = stringLength(str2);
for (int i = 0; i < len; i++) str1[i] = str2[i];
str1[len] = '\0';
printf("newString: %s\n", str1);
}
|
메모리 해제
// 메모리 해제
void freeText(text *t) {
free(t->content);
free(t);
}
|
문자열 동적 할당
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <stdio.h> #include <stdlib.h> struct text { int capacity; char *content; }; typedef struct text text; int stringLength(char *str) { int len = 0; for (int i = 0; str[i] != '\0'; i++) len++; return len; } void stringCopy(char *str1, char *str2) { int len = stringLength(str2); for (int i = 0; i < len; i++) str1[i] = str2[i]; str1[len] = '\0'; } text *newText(char *str) { text *t = malloc(sizeof(text)); t->capacity = 24; while(stringLength(str) + 1 > t->capacity) t->capacity *= 2; t->content = malloc(t->capacity); stringCopy(t->content, str); return t; } int main() { text *t = newText("Hello World!"); printf("%s\n", t->content); free(t); return 0; } |
반응형
'C 언어 > C언어 기초' 카테고리의 다른 글
[C언어 #65] 동적할당 - 문자열 - 합치기/이어붙이기, 자르기 (0) | 2020.09.12 |
---|---|
[C언어 #64] 동적할당 - 문자열 - 길이, 문자 반환, 문자 입력 (0) | 2020.09.12 |
[C언어 #62] 연결 리스트 (Linked lists) - 스택 (stack) 구현 - 오름차순 정렬/삽입 (0) | 2020.08.27 |
[C언어 #61] 연결 리스트 (Linked lists) - 스택 (stack) 구현 - 내림차순 정렬/삽입 (0) | 2020.08.24 |
[C언어 #60] 연결 리스트 (Linked lists) - 스택 (stack) 구현 (0) | 2020.08.19 |