CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL
공부 STUDY/C | C++

[ C ] 문자를 저장하는 배열 | char 형 배열 | 문자열 대입 방법 | strcpy(), gets(), puts()

[ C ] 문자를 저장하는 배열 | char 형 배열 | 문자열 대입 방법 | strcpy(), gets(), puts()
공부 STUDY/C | C++

[ C ] 문자를 저장하는 배열 | char 형 배열 | 문자열 대입 방법 | strcpy(), gets(), puts()

2023. 1. 28. 10:24

단어는 보통 알파벳을 연속적으로 적고 그 순서에 따라 의미가 달라진다. 

이런 단어를 컴퓨터 메모리에서 데이터로 처리하려면 순서에 맞게 연속적으로 저장해야하는데,

이때 사용하면 아-주 적합한 자료형이  바로 배열이다.

특히 알파벳 문자 같은 경우 한 바이트로 표현이 가능하므로, char형 배열을 사용하는 것이 적합하다!

 

 

char 형 배열의 선언과 초기화

 

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

예를들어 문자열 'apple'을 저장하려할때, 배열은 배열 요소의 개수가 최소한 6 개 이상이어야한다. 즉, 남는 공간이 하나 이상은 있어야 한다는 것!

 

왜일까?

널문자(\0) 때문이다. 

 

char str[100] = "applejam";

초기화한 문자들은 배열의 처음부터 차례대로 저장되어 문자열을 만든다. 이때 남는 배열 요소에는 자동으로 0이 채워진다. 이렇게 char형 배열에 저장된 0을 특별하게 '널 문자'라고 부른다. 널 문자는 문자열의 끝을 표시하는 용도로 쓰인다. 

printf 함수가 배열의 크기와 상관없이 초기화된 문자열만 출력하는 것도 널 문자가 있기 때문이다. 널 문자가 나올 때 까지만 출력하도록 만들어졌기 때문! 이러한 규칙은 문자열을 처리하는 모든 함수에 적용된다.  scanf 함수도 마찬가지로 사용자가 입력한 문자열 다음에 자동으로 널 문자를 추가하여 문자열의 끝을 표시한다.

 

따라서 char 형 배열을 선언할 때는 다음의 사항을 주의해야한다.

 

- 배열의 크기는 최대한 넉넉히 선언한다.

 

- 배열 요소의 개수는 최소 문자열 길이 + 1이어야 한다. ( 널 문자 ) 

 

문자열의 대입

 

문자열은 저마다 길이가 다르다. 그래서 초기화 된 이후 배열에 새로운 문자열을 저장하려고 한다면 일반 변수처럼 대입 연산자를 사용하는 것은 불가능하다. 이 떄 사용하는 함수가 바로 strcpy() 함수이다.

 

왜 문자열에는 대입 연산자를 사용할 수 없을까?

char str[100];
str = "apple";

위와 같은 배열의 대입 연산은 불가능하다. 컴파일에서 에러가 발생하게 되는데, 그 이유는 배열명이 포인터이기 때문이다. 배열명은 배열이 할당된 메모리 주소값이므로 숫자이다. 예를들어 포인터가 메모리 100번지라면, 대입 연산자를 활용했을 때 100번지(상수)에 apple을 대입하는 것과 같다. 그러므로 대입 연산자이 왼쪽에는 배열명이 올 수 없다!

 

그래서 우리는 다음과 같은 함수를 사용하여 배열에 문자열을 대입해야하는데,

strcpy() 함수

char 형 배열에 새로운 문자열을 저장하는 함수로, 저장된 문자열의 길이를 파악하며 그 만큼의 길이만 char 형 배열에 복사한다.

당연히 문자열의 끝에 널 문자를 자동으로 추가해준다. 

 

#include <stdio.h>
#include <string.h>

int main(void)
{

char str1[100] = "cat";
char str2[100];

strcpy(str1, "tiger");
strcpy(str2, str1); // str2에 str1을 복사한다.
printf("%s, %s \n, str1, str2);

return 0;

}

strcpy() 함수 사용법

strcpy(저장될 배열명 , 저장할 배열명);

 

문자열 전용 입출력 함수 gets / puts

scanf 함수는 char 형 배열에 문자열을 입력할 수 있지만, 빈칸이 중간에 있는 경우 빈칸 전까지만 입력한다. 따라서 빈칸을 포함한 문자열 입력 방식이 필요하다. 이때 사용하는 것이 gets 함수이다. 이 함수는 빈칸을 포함하여 한 줄 전체를 문자열로 입력한다. 

짝을 이루는 출력함수 puts도 있다. 

 

puts 함수는 문자열을  출력한 후 자동으로 줄을 바꾼다. 그래서 문자열을 출력한 후 바로 이어서 입력하는 것이 불가능하다.

저작자표시 (새창열림)

'공부 STUDY > C | C++' 카테고리의 다른 글

[ C ] 주소와 포인터 차이? | 포인터의 크기 | 포인터 자료형 | 포인터 기능  (0) 2023.01.28
[ C ] 포인터란? 메모리 주소 | 포인터 연산자( &, *)  (0) 2023.01.28
[ C ] 배열 | 배열의 선언과 사용  (0) 2023.01.28
[ C ] 겨울방학동안 C 포인터/ 구조체/ 동적메모리 개념 확실하게 익히기 | 자료구조 학습전 갖추어야할 베이스지식  (0) 2023.01.28
[C] fgetc() 함수의 반환값은 int  (0) 2022.12.03
  • char 형 배열의 선언과 초기화
  • 왜일까?
  • 문자열의 대입
  • 왜 문자열에는 대입 연산자를 사용할 수 없을까?
  • strcpy() 함수
  • strcpy() 함수 사용법
  • 문자열 전용 입출력 함수 gets / puts
'공부 STUDY/C | C++' 카테고리의 다른 글
  • [ C ] 주소와 포인터 차이? | 포인터의 크기 | 포인터 자료형 | 포인터 기능
  • [ C ] 포인터란? 메모리 주소 | 포인터 연산자( &, *)
  • [ C ] 배열 | 배열의 선언과 사용
  • [ C ] 겨울방학동안 C 포인터/ 구조체/ 동적메모리 개념 확실하게 익히기 | 자료구조 학습전 갖추어야할 베이스지식
CHANGEL
CHANGEL
NOT GIVING UP | SOLID BASICS

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.