Language/C
[따배씨] 4.3 문자열이 메모리에 저장되는 구조
migrationArc
2021. 5. 12. 23:27
따배씨 - 따라하며 배우는 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