반응형

길이가 100인 n개의 문자열을 저장하는데 필요한 동적 메모리를 할당해보자.


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
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int count=0;
    char **p=NULLint i;
    printf("문자열의 개수: ");
    scanf("%d",&count);
    p=(char**)malloc(sizeof(char*)*count);
    for(i=0;i<count;i++)
    {
        p[i]=(char*)malloc(sizeof(char)*100);
    }
    getchar();
    for(i=0;i<count;i++)
    {
    printf("문자열을 입력하세요: ");
    gets(p[i]);
    }
    printf("\n");
    for(i=0;i<count;i++)
    {
    puts(p[i]);
    }
    for(i=0;i<count;i++)
    {
    free(p[i]);
    }
    free(p);
    return 0;
}
cs

p에 동적메모리 할당할 때는 실제 메모리크기는 sizeof(char*) * count 이고
p[i]에 동적메모리 할당할 때 실제 메모리크기는 sizeof(char) * 100 이라는 것을 조심해야합니다.
p와 p[i]는 포인터인고 p[i]는 문자열을 가리키고 p는 문자열의 이름(즉 문자열의 주소)를 가리킵니다.
따라서 크기를 매우 조심해야합니다. 안그러면 오류가 발생합니다. (한마디로 2만큼 받아오고 4만큼 반납을 못시킨다는 말임)

참고 블로그 : http://bozeury.tistory.com/19




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

단어 입력 받기  (0) 2017.02.21
주소록 저장  (0) 2017.02.21
양의 정수들의 합  (0) 2017.02.21
명령어 라인으로 텍스트 파일 합치기  (0) 2017.02.18
단어 바꾸기  (0) 2017.02.18

+ Recent posts