본문 바로가기
PRACTICE/Basic

[C] %s, %c, null문자에 따른 출력값 비교 + 포인터변수에 배열주소를 저장하고 배열에 저장된 값 출력하기

by 1005 2020. 8. 24.

 

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
 
 
int main() {
 
    //a 방식으로 초기화하던 aa 방식으로 초기화하던 결과값은 같다. 
    char a[] = "hello";                         //널문자가 자동으로 포함됨.
    char aa[] = { 'h','e','l','l','o','\0' };   //문자열을 선언할 때는 널문자를 꼭 포함해야함.
    char* pa = a;
    char* paa = aa;
    int i = 0;
 
    int size = sizeof(a) / sizeof(a[0]);            //배열 인덱스값 size변수에 저장. 
    printf("베열크기(null문자 포함): %d \n"size); //null값 포함해서 6 출력.
    printf("\n");
 
    printf("c로 출력(쓰레기값 출력): %c \n", pa); //문자열 전체를 출력할 때는 %s써야함!
    printf("a배열값 출력: %s \n", pa);            //포인터를 통해서 출력가능.
    printf("aa배열값 출력: %s \n", paa);          //포인터를 통해서 출력가능.
    printf("\n");
 
    for (i = 0; i < size - 1++i) {
        //printf("a[%d] 의 값: %s \n", i, a[i]);
        printf("a[%d] 의 값: %s \n", i, pa + i);
        //%s로 출력하면 널문자를 만날때 까지 출력하기 때문에 인덱스에 딱 한 글자만 출력되지않음.
        //인덱스 별로 한글자씩 출력하고 싶으면 %c를 써야함. 
    }
    printf("\n");
 
    for (i = 0; i < size - 1++i) {
        //printf("aa[%d] 의 값: %c \n", i, aa[i]);
        printf("aa[%d] 의 값: %c \n", i, *(paa + i));
    }
    printf("\n");
 
    printf("----- aa배열에 각 인덱스마다 값 저장하기 -----\n");
    for (i = 0; i < size - 1++i) {
        printf("aa[%d]에 저장: ", i);
        scanf("%s", paa + i);
    }
 
    printf("----- scanf를 통해 바뀐 값 출력하기 -----\n");
    for (i = 0; i < size - 1++i) {
        //printf("aa[%d] 의 값: %c \n", i, aa[i]);
        printf("aa[%d] 의 값: %c \n", i, *(paa + i));
    }
    printf("scanf로 배열에 저장한 값 출력:%s \n", paa);
 
    printf("\n");
    printf("a배열에 배열크기 보다 적은 값 저장: "); //배열 크기보다 작은 hi값 입력.
    scanf("%s", pa); //hi 에 널문자를 포함해서 배열a에 저장함. 
    printf("\n");
    printf("scanf로 배열에 저장한 값 출력: %s \n", pa); //널문자를 만나 hi까지만 출력.
    for (i = 0; i < size - 1++i) {
        //printf("a[%d] 의 값: %c \n", i, a[i]);
        printf("a[%d] 의 값: %c \n", i, pa[i]);
 
    }
    printf("\n");
 
    printf("int형 배열일때------------------------------------------------------------- \n");
 
    int arrint[] = { 1,2,3,4,5 };
    int* parrint = arrint;
 
    for (i = 0; i < 5++i) {
        printf("arrint[%d] 의 값: %d \n", i, arrint[i]);
    }
 
    printf("\n");
    printf("----- arrint배열에 각 인덱스마다 값 저장하기 -----\n");
    for (i = 0; i < 5++i) {
        printf("arrint[%d]에 저장: ", i);
        //scanf("%d", &arrint[i]); //주소를 넘겨주기 위해 &붙임.
        scanf("%d", parrint + i);
    }
 
    printf("\n");
    printf("----- scanf를 통해 바뀐 값 출력하기 -----\n");
    for (i = 0; i < 5++i) {
        //printf("a[%d] 의 값: %d \n", i, arrint[i]);
        printf("a[%d] 의 값: %d \n", i, parrint[i]);
    }
 
}
 

 

< char형 배열 결과값>

 

 

< int형 배열 결과값 >

 

 

 

댓글