2010. 7. 10. 02:04


제 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
Posted by 토실토실천재