이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

[3주차] 문자열

  • 2020.04.10 15:28
  • 학부 수업/C프로그래밍
반응형

문자열

C에서 문자열(String)은 Char 배열로 처리.

문자열 끝에는 null 문자가 항상 있어야 하고, 이게 없으면 문자열이 아니라 문자 배열로 인식.

문자열의 표현은 큰따옴표 두개로 하고 문자열 입출력을 위한 서식 문자는 %s임.

scanf("%s", str);

%s는 문자열의 끝을 알리는 null 이 입력되기 전까지 입력을 받는데, 이는 공백, 개행문자, \t이 입력되기 전까지만 입/출력을 한다.

null 문자

문자열의 끝에는 항상 문자열의 끝을 알리는 null 문자가 들어가며, 이는 \0로 표현한다. 또한 null의 아스키 코드는 0 이다.

null 은 값이 널값임을 의미하고 NULL은 포인터가 널값임을 의미하나 사실 같은 것이다.

char str[] = "Hello";

위 코드의 결과로 생성되는 str 배열의 크기는 null문자를 포함하여 6자리가 된다.

null의 아스키코드가 0임을 활용하면 아래와 같이 코드를 짤 수 있다.

for(int *p = ar; *p; p++){...}

*p가 null이 되면 0, false 이므로 반복을 멈춘다.

문자열 상수

char *str = "hello";

위와 같이 문자열을 선언한 경우, str의 메모리가 수정 불가능한 상태로 제공되어 str을 상수로 사용할 수 있다.

이 경우, []를 통한 일부 수정을 불가하며 str에 새 값을 대입하여 아예 새로운 글자를 넣어야만 편집이 가능하다.

다수의 문자열 저장하기

char *nums = {"zero", "one", "two"}

식으로 저장하면 필요한 문자열만 저장하여 메모리를 아끼고 문자열을 여러게 적절하게 동적으로 저장할 수 있다.

char* pnum[3] = { "zero", "one", "two" };
char** p;
for (p = pnum; p < pnum + 3; p++)
    printf("%s\n", *p);

<string.h> 사용하기

#include <string.h>를 쳐서 string 라이브러리를 사용할 수 있다.

strlen(char *str)

문자열의 길이를 알려준다.

char str[20] = "hello"; //hello\0
printf("leng: %d", strlen(str)); //6

strcpy(char *dest, char *des)

문자열을 다른 문자열로 복사시켜준다.

char str1[6] = "hello";
strcpy(str1, "hi");

>>"hi"

null 문자도 복사하기 때문에 str1에는 hi\0lo\0이 들어가게 된다.

할당받은 메모리가 없는 상태에서 값을 넣으려고 시도하면 런타임 오류가 난다.

strcat(char *dest, char *src)

dest 문자열 뒤에 src 문자열을 접합

char a[11] = "hello";
strcat(a,"world");

>>"helloworld"

strncat도 알아놓기

strcmp(char *lhs, char *rhs)

사전 순으로 lhs와 rhs를 비교하여 문자열 lhs < rhs이면 음수, 같으면 0, lhs > rhs이면 양수 반환

char a[11] = "HelloWorld";
char b[3] = "Hi";
strcmp(a,b);

>>1

문자열을 수로 형변환

아래 함수들은 <stdlib.h>에 선언되어 있다.

printf("%d\n", atoi("123") );
printf("%ld\n", atol("-123") );
printf("%f\n", atof("123.45") );

문자열 및 문자 입출력

printf와 scanf는 다양한 기능을 가진 범용 입출력 함수로 크기가 크고 속도가 느리다.

문자열과 문자에 특화된 입출력 함수로 아래가 있다.

문자열 : puts, gets (gets_s, fputs)
문자 : putchar, getchar

int puts(char *str)

문자열을 출력하고 마지막에 줄바꿈 문자 \n를 출력, 반환값은 성공시 0, 실패시 EOF.

char* gets(char *str)

문자열을 엔터 입력때까지 입력받고 엔터가 입력되면 이는 저장하지 않고 \0을 문자열 뒤에 삽입.

메모리에 값을 직접 삽입하므로 보안상 취약

gets_s라는 보안 강화판 함수 존재.
fgets라는 대안도 있다.

반응형

'학부 수업 > C프로그래밍' 카테고리의 다른 글

[6주차] 연산자 함수, 자료형 심화  (0) 2020.04.10
[5주차] 동적 할당  (0) 2020.04.10
[4주차] 구조체  (0) 2020.04.10
[2주차] 포인터 개요 및 복습  (0) 2020.04.10
세종대학교 고급 C 프로그래밍 강의노트  (2) 2020.04.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [5주차] 동적 할당

    [5주차] 동적 할당

    2020.04.10
  • [4주차] 구조체

    [4주차] 구조체

    2020.04.10
  • [2주차] 포인터 개요 및 복습

    [2주차] 포인터 개요 및 복습

    2020.04.10
  • 세종대학교 고급 C 프로그래밍 강의노트

    세종대학교 고급 C 프로그래밍 강의노트

    2020.04.10
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바