반응형

동적 메모리 할당을 이용하여서 사용자로부터 받은 주소록을 저장하고 출력하는 프로그램을 작성하라. 사용자로부터 먼저 주소의 개수를 입력받도록 하라. 주소의 많은 정보 중에서 이름과 휴대폰 번호만을 저장하도록 하자.


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
39
40
#include <stdio.h>
#include <stdlib.h>
#define SIZE 30
typedef struct BOOK
{
    char name[SIZE];
    char number[SIZE];
}book;
int main(void)
{
    int count=0;
    int i;
    book *p;
    printf("주소의 개수: ");
    scanf("%d",&count);
    getchar();
    p=(book*)malloc(count*sizeof(book));
    if(p==NULL)
    {
        printf("메모리할당오류\n");
        exit(1);
    }
    for(i=0;i<count;i++)
    {
        printf("이름을 입력하세요: ");
        gets(p[i].name);
        printf("휴대폰 번호를 입력하세요: ");
        gets(p[i].number);
    }
    printf("========================================\n");
    printf("이름\t휴대폰 번호\n");
    printf("========================================\n");
    for(i=0;i<count;i++)
    {
        printf("%s\t%s\n",p[i].name,p[i].number);
        printf("========================================\n");
    }
    free(p);
    return 0;
}
cs




반응형

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

양의 정수 저장  (0) 2017.02.22
단어 입력 받기  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
양의 정수들의 합  (0) 2017.02.21
명령어 라인으로 텍스트 파일 합치기  (0) 2017.02.18
반응형

길이가 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
반응형

동적 메모리 할당을 이용하여서 사용자로부터 양의 정수들의 합을 구하는 프로그램을 작성하라. 사용자로부터 먼저 정수의 개수를 입력받도록 하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int size=0;
    int i;
    int *p;
    int sum=0;
    printf("정수의 개수: ");
    scanf("%d",&size);
    p=(int*)malloc(sizeof(int)*size);
    for(i=0;i<size;i++)
    {
        printf("양의 정수를 입력하세요: ");
        scanf("%d",&p[i]);
    }
    for(i=0;i<size;i++)
    {
        sum+=p[i];
    }
    printf("합은 %d입니다.\n",sum);
    free(p);
    return 0;
}
cs







반응형

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

주소록 저장  (0) 2017.02.21
문자열 동적 메모리  (0) 2017.02.21
명령어 라인으로 텍스트 파일 합치기  (0) 2017.02.18
단어 바꾸기  (0) 2017.02.18
특정 단어 찾기  (0) 2017.02.18

+ Recent posts