몽상실현개발주의

[따배씨] 4.3 문자열이 메모리에 저장되는 구조 본문

Language/C

[따배씨] 4.3 문자열이 메모리에 저장되는 구조

migrationArc 2021. 5. 12. 23:27

[따배씨] 4.3 문자열이 메모리에 저장되는 구조

따배씨 - 따라하며 배우는 C언어

4강 문자열과 형식 맞춘 입출력

4.3 문자열이 메모리에 저장되는 구조

  • 문자의 마지막을 표현하기 위해 문자열의 마지막에 '\0' - ASCII Code NULL 이 저장됨

 

#include <stdio.h>

int main()
{
    int a = 1;
    int int_arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    
    printf("%i %i %i\n", int_arr[0], int_arr[1], int_arr[9]);
    printf("%i\n", int_arr[10]);
  
//    printf("%i\n", int_arr[10000]);
  
    return 0;
}

 

printf("%i\n", int_arr[10]);
// 1164378127
  • 배열의 범위 (0~9) 를 넘어간 위치이기 때문에, 임의의 숫자가 할당 되어 있음을 확인
printf("%i\n", int_arr[10000]);
// Error 발생: EXC_BAD_ACCESS
  • 배열의 범위를 크게 벗어났기 때문에 에러 발생

 

 

 

#include <stdio.h>

int main()
{
    char c = 'a';
    char str1[10] = "Hello";
    char str2[10] = {'H','i'};
    
    printf("%c\n", c);
    printf("%s\n", str1);
    printf("%s\n", str2);
    
    printf("%hhi %hhi %hhi %hhi %hhi\n", str2[0], str2[1], str2[2], str2[3], str2[4]);
    
//    char str3[10] = "Hello, World"; // array size is not enough
    char str3[20] = "Hello, \0World";
    printf("%s\n", str3);
//    NULL을 만나서, Hello 까지만 printf가 동작
    return 0;
}

 

printf("%hhi %hhi %hhi %hhi %hhi\n", str2[0], str2[1], str2[2], str2[3], str2[4]);
// 72 105 0 0 0
  • ASCII 코드 숫자를 출력 하였을 때, 문자열의 빈 공간에 0이 할당되어 있는것을 확인 할 수 있음.
char str3[10] = "Hello, World";
printf("%s\n", str3);
// Hello, Wor\240
  • array size is not enough
  • NULL character 까지 합쳐 13 글자를 10칸의 메모리에 할당 하게 되어, 10개의 글자 까지만 배열에 저장
  • 배열에 NULL이 없기 때문에 printf 함수는 계속 동작하여 NULL 을 만날때까지 메모리에 임의 저장된 값들을 출력
char str3[20] = "Hello, \0World";
printf("%s\n", str3);
// Hello,
  • NULL을 만나면 pirntf() 함수가 정지되어 이전까지만 출력 됨

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

Comments