반응형

C언어는 문자열을 표현하기 위해 배열(Array)를 활용한다.

 

그리고 문자열을 표현하기 위해 보통 1byte 크기인 'char' 타입을 사용한다.

문자열의 끝은 NULL을 사용한다. (문자열 마지막에 \0 이 있으면 문자열의 끝으로 인식)

고로 문자열의 크기는 마지막 1개가 더 필요하다. ("hello world!"의 경우에는 각 알파벳 + 띄어쓰기 + NULL 하여 총12개 필요)

각 배열에 들어가는 문자 하나하나는 모두 아스키코드이다. (아스키코드 번호임)

 

선언하고 만드는 방법은 아래와 같다.

<타입> <배열이름 [배열크기] >

// NULL과 띄어쓰기를 포함하여 총 13개의 char 크기가 필요
char str[13] = "Hello world!";

배열의 크기는 미리 정하지 않고 배열을 입력하면 알아서 사이즈가 잡히게 된다.

char str2[] = "hello world!";
반응형

아래 예시 코드를 돌려서 크기를 확인

#include <stdio.h>

/*
	배열은 보통 char형을 사용.
	알파벳 하나하나가 배열 한칸에 할당.
	문자열 구조는 맨 끝에 NULL문자( '\n' )가 들어가야 함
*/

int main()
{
	// NULL문자를 포함한 13개 배열이 할당되어야 함.
	char str1[13] = "nice to meet";
	// 배열크기 자동조절, hello NULL 문자 총 6개 배열이 할당됨. str2라는 주소에 값 할당.
	char str2[] = "hello world!";

	printf("배열 크기 : %d", sizeof(str1));
	printf("배열 크기 : %d", sizeof(str2));

	return 0;
}

 

(결과)

 

* 문자열을 scanf로 받는 방법.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	// 아래와 같은 배열명 선언은 배열 변수명 자체가 주소값으로 저장됨.
	char str[50];
	int index = 0;

	printf("문자열 쓰시오. :");
	// 문자열 변수명 str은 그자체가 주소값을 지칭하므로 &없이 사용. 즉, &str 으로 사용하지 않음.
	scanf("%[^\n]", str);
	printf("입력받은 문자열 : %s\n", str);

	printf("문자 단위 출력: ");
	while (str[index] != '\0')
	{
		printf("%c", str[index]);
		index++;
	}
	printf("\n");

	return 0;
}

(결과)

아래에서 scanf에 %[^\n]  을 입력한 이유는, 띄어쓰기 키가 와도 문자열을 계속 이어서 str에 저장하기 위함.

 

 

 

 

 

 

 

반응형

+ Recent posts