IT 프로그래밍

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

기술1 2024. 1. 5. 10:20
반응형

 

숫자 하나 1

숫자의 배열 0 1 2 3 4 5 6 7 8 9

문자 하나 'a'

문자의 배열 'H' 'e' 'L' 'L' 'o' '\0' 
  • ascii를 사용해서 문자형을 저장한다. 
  • '\0' 은 문자열의 끝을 알리는 마침표와 같은 개념이다. 

 

연습 코드 1

int main(void)
{
	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]);


	return 0;
}

 

해당 int_arr[10]이라는 배열을 통해서 배열을 만들어준 것으로 

 

%i 

%i는 C 언어에서 사용되는 형식 지정자(format specifier) 중 하나로, 정수를 출력할 때 사용됩니다. %i는 정수를 10진수로 출력하는데 사용되며, %d와 동일한 기능을 수행합니다.

 

대부분의 프로그래밍 언어는 int_arr[0]은 0에서 시작한다.

 

출력하면 각 0, 1, 9가 나온다.

 

연습코드 2

int main(void)
{
	char c = 'a';
	char str1[10] = "Hello"; //null character
	char str2[10] = { 'H', 'i' };

	printf("%c\n", c);
	printf("%s\n", str1);
	printf("%s\n", str2);


	return 0;
}

해당 내용은 각 세개를 출력하는 건데 특이점으로는 char 은 1 byte이므로 하나의 문자만 가지지만 char str[10]을 해주면서 10byte가 늘었지만 항상 뒤에 '\0'이 있기 때문에 9개만 가질 수 있다는 점이다.

 

해당 내용을 출력하면 정상적으로 다 작동한다. 

 

 

 

int main(void)
{
	char c = 'a';
	char str1[10] = "Hello"; //null character
	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]);


	return 0;
}

위는 코드에서 %hhi를 출력하는 것이다. 

%hhi는 c언어의 signed char 타입의 변수를 10진수로 나타내주는 형식자이다.

 

따라서 해당 내용을 출력하면 

 

str2[0] 에서는 H 를 10진수로

str2[1]에서는 i를 10진수로

그리고 나머지는 Null 값이 나오게 된다. 

 

printf 에서 null character을 만나면 그 즉시 중지한다. 

반응형