못정함

C언어) 8-2장: 문자를 저장하는 배열 본문

C언어 공부/C언어 독학 (교재)

C언어) 8-2장: 문자를 저장하는 배열

hadara 2024. 9. 16. 23:04

-배열이 단어를 저장하기 위한 가장 좋은 방법임

 

저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야함

nul문자 (\0) 를 저장하기 때문임

*nul문자는 상당히 중요함. 문자열의 끝을 표시한다.

 

<선언, 초기화>

char str[80];

str[0] = 'a';
str[0] = 'p';
str[0] = 'p';
str[0] = 'l';
str[0] = 'e';
str[0] = 'j';
str[0] = 'a';
str[0] = 'm';
str[0] = '0' // 하나하나 넣을 거면 반드시 널 문자 넣어줘야함!!!!!!!!!!!!!!!!!!!!!!!!!!

이렇게 넣든

char str[80] = "applejam";

이렇게 넣든

둘 다

아래처럼 저장됨

a p p l e j a m \0

 


#include <stdio.h>

int main(void)
{
    char str[80] = "applejam";

    printf("initial string: %s\n", str);

    printf("insert string: ");
    scanf("%s", str); //string 입력받을 땐 '&'안 쓴다

    printf("string after insert: %s\n", str);
    
    return 0;
}

 

*null문자의 중요성

- grape로 입력 값 덮을 때 \0이 없을 경우를 상상해보자 끔찍하다

- \0 덕분에 grape만 깔끔하게 출력되는 것이다

 

초기값)

a p p l e j a m \0 \0

입력후)

g r a p e /0 a m \0 \0

 

**주의**

-배열의 크기는 넉넉하게

-배열 요소의 개수는 최소한 '문자열 길이 +1' 이어야함. \0를 위하여


<문자열 대입> : 대입 연산자 사용X // 'strcpy' 함수 사용.

-초기화 이후에 새로운 문자열 저장하고 싶으면 'strcpy' (stringcopy) 함수를 사용

-char형 배열에 새로운 만자열을 저장하는 함수. 저장할 문자열의 길이를 파악해 딱 그 길이만큼만 char형 배열에 문자열을 복사하고, 널문자도 자동으로 붙여줌

/*반드시 헤더 파일 포함시키기*/

#include <string.h>
<사용법>

strcpy (저장될 배열명, 저장할 문자열)

 

*저장할 문자열(두번째 인수)에는 char형 배열의 배열명도 사용 가능

-오른쪽 값을 왼쪽 변수에 대입하는 연산으로 생각하면 쉬움. 

-첫 번째 인수에는 문자열 상수 사용 불가 

 

#include <stdio.h>
#include <string.h> // strcpy 함수 사용을 위해 반드시 써줘야함

int main(void)
{
    char str1[80] = "cat";
    char str2[80];

    strcpy(str1, "tiger");  // str1 배열에 "tiger" 복사
    strcpy(str2, str1); // str2 배열에 str1 배열의 문자열을 복사

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

    return 0;
}

<문자열 전용 입출력 함수: gets, puts>

 

-문자열 입출력 시에는 printf(); 말고 gets, puts 사용하자

gets -빈칸 포함, 한 줄 전체를 문자열로 입력
-enter를 누르기 전까지 전체를 하나의 문자열로 배열에 저장함

-마지막에 null문자 붙여줌
 

-입력한 배열의 크기를 검사하지 않음. 항상 배열의 크기를 스스로 고려해야한다.
gets(char형 배열명);
puts -문자열 출력 함수
-문자열 출력 후 자동으로 줄바꿈을 해줌
puts(char 형 배열명);
 
or
 
puts(“내가 쓰고 싶은 말 쓰기”);

 

#include <stdio.h>

int main(void)
{
    char str[80];

    /*문자열 입력 gets*/
    printf("Insert string: ");
    gets(str); // 빈칸을 포함한 문자열 입력

    /*문자열 출력 puts*/
    
    puts("Inserted string: "); //문자열 상수 출력 
    puts(str); // 배열에 저장된 문자열 출력
}