제 15장 1차원 배열 - 2
● 문자열 상수
- 문자열이면서 상수의 특징을 지닌다.
예) printf("hi, i'm chun jae saim \n");
// 문자열이 메모리 공간에 먼저 올라간후 printf함수 를 호출한다.
// 문자열 상수 임; 문자열 데이타는 바꿀수 없다.
// 이 문자열을 변수로 지정하는 방법? : 배열사용
1. 메모리 공간에 hi, i'm chun jae saim이라는 문자열이 올라간다.
- 즉 문자열은 상수다.-> " " 안에 문자열은 상수다.
2. 이 메모리값의 주소값이 printf함수로 넘어간다.
3. 실제 주소값을 전달하면서 printf함수가 실행
☞ 우리는 이제 문자열을 변수로 선언해보는 작업을 해보자
● 문자열 변수
- 문자열이면서 변수의 특징을 지닌다.
ex) char array[5] = "Good";
// 한 요소에 한 문자를 넣는다
// 근데 문자열의 길이는 4인데 배열요소는 5개이다.
ex) char array_1[] = "Evening";
// 오른쪽에 있는 문자열의 데이타를 참조해서 즉, 7개
// 하지만 문자열의 길이는 7 + 1로 해준다.
문자열 배열이라고 한다.(문자열 변수)
예제) ======================================================
#include <stdio.h>
int main()
{
char Array[6] = "Hello"; // 문자열길이 5+1개
char Array_1[8] = "morning"; // 문자열길이 7+1개
printf("%s \n", Array); // 문자열형태 %s
printf("%s \n", Array_1);
return 0;
}
// 과연 왜 +1을 해줘서 표현을 하는건지?
=============================================================
● 문자열의 특징
- 문자열 ; C언어에서는 문자열 조건
> 반드시 NULL문자를 가진다.
> NULL을 달아줘야 하는 이유?
- 문자열은 (NULL)문자를 끝에 지닌다.
- 널(NULL)문자 : '\0'(숫자 0임)
(아스키코드 값으로 0);
ex) char arr[] = "AB" // []안에는 3이된다.
// 길이가 3인 arr 배열

@ 문자뒤 백슬러쉬0(\0) ; 특수문자
- 문자의 끝을 나타내기 위한 용도
- NULL 문자라고 일단은 이해한다.
- 아스키코드표를 참조(블로그 - 메모 에 있음)
- 문자 '숫자 ; 0'의 문자의 아스키코드값은 49 다.
> 혼돈 주의
● 널문자를 지녀야 하는 이유?
- 문자열의 끝을 표현하기 위해서
> 쓰레기 값과 실제 문자열의 경계를 나타내기 위해
- printf함수는 널 문자를 통해서 출력의 범위를 결정짓는다.
예제 ) ====================================================
#include <stdio.h>
int main()
{
char str[100] = "hello World !!"; // 길이가 100인 char형 배열 생성
// 이 문자열의 길이(인데스)가 많이 남는다.
// 쓰레기값으로 채워진다. 문자열끝에 항상 '\0' 자동으로 들어간다
printf("%s \n", str);
return 0;
}
// 의미없는 쓰레기 값이 들어가게 된다.
// 하지만 cpu는 어디까지가 실질적인 문자열인지 모른다.
// hello World !! \0(널문자)가 포함된다.
===========================================================
printf("hellow \n");
// 이 문자열은 뒤에 안보이지만
// '\0'이 들어가 있다.
● 문자열과 char형의 배열의 차이점
- char str1[] = "abc" // 문자열이자 캐릭터형 변수
// 인덱스는 4다
- char str2[] = {'a', 'b', 'c'}; // 문자열은 아니다.
// 인덱스는 3이다.
- char str[] = {'a', 'b', 'c', \0'}; // 문자열
// 인덱스는 4이다.
예제) ========================================================
#include <stdio.h>
int main(void)
{
int i;
char ch;
char Array[6] = "hello";
printf("-- 변경 전 문자열 -- \n");
printf("%s \n", Array); // 현재 문자열 출력
for(i=0; i<6; i++) // 5번 반복
printf("%c | ", Array[i]);
// ch문자변수에 Array의 각 요소를 순서적으로 한개씩 출력한다
for(i=0; i<3; i++)
{
ch = Array[4-i];
Array[4-i] = Array[i];
Array[i] = ch;
}
// for문으로 문자열의 요소를 ch에 저장하여
// 각 요소의 문자의 순서를 바꾼다.
// for문이 돌아가는걸 직접 그려서 분석하는것이 이해하기 쉽다.
printf("\n -- 변경 후 문자열 == \n");
printf("%s \n", Array);
return 0;
}
예제) ========================================================
#include <stdio.h>
int main()
{
char str[30];
printf("문자열 입력 : ");
scanf("%s", str);
// 어랏 ? 이제는 &가 붙지 않는다.
// 문자열을 사용할때는 &는 쓰지 않는다
// 자세한 사항은 포인터에서 다루겠다.
printf("입력된 문자열 : %s \n", str);
return 0;
}
'프로그래밍 > C' 카테고리의 다른 글
제 17장 포인터의 이해 - 예제 (0) | 2010.07.10 |
---|---|
제 16장 포인터의 이해 - 1 (0) | 2010.07.10 |
제 14장 1차원 배열 - 1 (0) | 2010.07.10 |
제 13장 C언어의 핵심 함수 - 3 (0) | 2010.07.10 |
제 12장 C언어의 핵심 함수 - 2 (0) | 2010.07.10 |