윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 21. 문자와 문자열 관련 함수.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 07. 반복실행을 명령하는 반복문.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
컴퓨터 프로그래밍 기초 [Final] 기말고사
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 01. 이것이 C언어다.
Chapter 25. 메모리 관리와 메모리의 동적 할당
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 24. 파일 입출력.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. printf 함수와 scanf 함수 정리하기
Error Detection and Correction
23장. 구조체와 사용자 정의 자료형 2.
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
TCP/IP Socket Programming…
11장. 1차원 배열.
C#.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
01_ C++ 스타일의 입출력 02_ C 스타일의 입출력
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Canary value 스택 가드(Stack Guard).
Chapter 16. C++ 형 변환 연산자와 맺는 글
Chapter 13. 템플릿(Template) 1
Chapter 15. 예외처리(Exception Handling)
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Chapter 10 데이터 검색1.
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
TVM ver 최종보고서
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Chapter 12 파일 입출력.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
윈도우에서의 유니코드.
13. 포인터와 배열! 함께 이해하기.
6 객체.
Presentation transcript:

윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 21. 문자와 문자열 관련 함수

윤성우의 열혈 C 프로그래밍 Chapter 21-1. 스트림과 데이터의 이동 윤성우 저 열혈강의 C 프로그래밍 개정판

무엇이 입력이고 무엇이 출력인가 입력장치 출력장치 윤성우의 열혈 C 프로그래밍 마우스 모니터 키보드 파일 화상 카메라 프린터 입출력 장치는 매우 포괄적이다. 데이터를 컴퓨터 내부로 받아들이는 것이 입력이고 외부로 전송하는 것이 출력이다.

데이터의 이동수단이 되는 스트림 윤성우의 열혈 C 프로그래밍  데이터의 입 출력이 가능한 이유! 콘솔 입출력을 위한 스트림은 프로그램이 시작되면 OS에 의해서 자동으로 생성된다.  데이터의 입 출력이 가능한 이유! 출력의 경로가 되는 출력 스트림과 입력의 경로가 되는 입력 스트림이 존재하기 때문  입출력 스트림이란? OS가 데이터의 입출력을 위해 놓아주는 소프트웨어적인 형태의 다리!

스트림의 생성과 소멸 윤성우의 열혈 C 프로그래밍 √ stdin과 stdout은 각각 표준 입력 스트림과 표준 출력 스트림을 의미하는 이름들이다. √ stderr은 표준 에러 스트림이라 하며, 출력의 대상은 stdout과 마찬가지로 모니터이다. √ 출력 리다이렉션이라는 것을 통해서 stdout과 stderr이 향하는 데이터 전송의 방향을 각각 달리 할 수 있다. √ stdin, stdout, stderr은 모두 프로그램 시작과 동시에 자동으로 형성되고 프로그램 종료시 자동으로 소멸된다. √ 이외의 스트림들은 프로그래머가 직접 형성해야 한다. 예를 들어 파일 입출력을 위한 스트림은 직접 형성해야 한다. 스트림이라 불리는 이유는 데이터의 이동을 한 방향으로만 형성하기 때문이다. 물이 한 방향으로 흐르듯 스트림도(스트림은 물의 흐름을 의미함) 한 방향으로만 데이터가 이동한다.

윤성우의 열혈 C 프로그래밍 Chapter 21-2. 문자 단위 입출력 함수 윤성우 저 열혈강의 C 프로그래밍 개정판

문자 입출력 함수 윤성우의 열혈 C 프로그래밍 putchar 함수는 인자로 전달된 문자를 모니터에 출력한다. √ 하나의 문자를 출력하는 두 함수 putchar 함수는 인자로 전달된 문자를 모니터에 출력한다. fputc 함수의 두 번째 인자를 통해서 출력의 대상을 지정한다. fputc의 두 번째 인자로 stdout이 전달되면 이 putchar 함수와 동일한 결과를 보인다. √ 하나의 문자를 입력 받는 두 함수 키보드로 입력된 문자의 정보를 반환한다. 문자를 입력 받을 대상정보를 인자로 전달한다. getchar 함수와 fgetc 함수의 관계는 putchar 함수와 fputc 함수의 관계와 같다.

문자 입출력 관련 예제 윤성우의 열혈 C 프로그래밍 실행결과 문자의 입력을 완성하는 엔터 키의 입력도 하나의 문자로 인식이 된다. 따라서 이 역시도 입출력이 가능하다. 실행결과 첫 번째 P는 입력이 된 P, 두 번째 P는 출력된 P 문자를 int형 변수에 저장하는 이유는 EOF를 설명하면서 함께 설명한다.

문자 입출력에서의 EOF 윤성우의 열혈 C 프로그래밍 실행결과 √ EOF의 의미 ▶ EOF는 End Of File의 약자로서, 파일의 끝을 표현하기 위해서 정의해 놓은 상수이다. ▶ 파일을 대상으로 fgetc 함수가 호출되었을 때 파일에 끝에 도달을 하면 EOF가 반환된다. √ 콘솔 대상의 fgetc, getchar 함수호출로 EOF를 반환하는 경우 ▶ 함수호출의 실패 ▶ Windows에서 Ctrl+Z 키, Linux에서 Ctrl+D 키가 입력이 되는 경우 키보드에는 EOF가 존재하지 않는다. 따라서 EOF를 Ctrl+Z 키와 Ctrl+D 키로 약속해 놓은 것이다. 예제에서 보이듯이. 하나의 문장이 입력되어도 문장을 이루는 모든 문자들이 반복된 getchar 함수의 호출을 통해서 입력될 수 있다. 실행결과

반환형이 int이고, int형 변수에 문자를 담는 이유는? 윤성우의 열혈 C 프로그래밍 반환형이 int이고, int형 변수에 문자를 담는 이유는? √ 반환형이 char형이 아닌 int형인 이유는? ▶ char형은 예외적으로 signed char가 아닌 unsiged char로 표현하는 컴파일러가 존재한다. ▶ 파일의 끝에 도달했을 때 반환하는 EOF는 -1로 정의되어 있다. ▶ char를 unsigend char로 표현하는 컴파일러는 EOF에 해당하는 -1을 반환하지 못한다. ▶ int는 모든 컴파일러가 signed int로 처리한다. 따라서 -1의 반환에 무리가 없다.

윤성우의 열혈 C 프로그래밍 Chapter 21-3. 문자열 단위 입출력 함수 윤성우 저 열혈강의 C 프로그래밍 개정판

문자열 출력 함수: puts, fputs 윤성우의 열혈 C 프로그래밍 실행결과

문자열 입력 함수: gets, fgets 윤성우의 열혈 C 프로그래밍 이 경우 입력되는 문자열의 길이가 배열을 넘어설 경우 할당 받지 않은 메모리를 참조하는 오류가 발생한다. stdin으로부터 문자열을 입력 받아서 str에 저장을 하되, 널 문자를 포함하여 sizeof(str)의 크기만큼 저장을 해라.

fgets 함수의 호출의 예 윤성우의 열혈 C 프로그래밍 실행결과1 엔터 엔터 실행결과2 실행결과3 엔터 엔터 엔터 엔터 6개의 문자씩 끊어서 읽히고 있다. 즉, 한번의 fgets 함수호출당 최대 6개의 문자만 읽혀진다. 엔터 엔터 실행결과2 실행결과3 엔터 키의 입력도 문자열의 일부로 받아 들임을 보임 공백을 포함하는 문자열을 읽어 들임을 보임 엔터 엔터 엔터 엔터

윤성우의 열혈 C 프로그래밍 Chapter 21-4. 표준 입출력 버퍼 윤성우 저 열혈강의 C 프로그래밍 개정판

표준 입출력 기반의 버퍼와 버퍼링의 이유 윤성우의 열혈 C 프로그래밍 √ 입출력 버퍼 √ 입출력 버퍼에 데이터가 전송되는 시점 ▶ 버퍼는 특정 크기의 메모리 공간을 의미한다. ▶ 운영체제는 입력과 출력을 돕는 입출력 버퍼를 생성하여 제공한다. ▶ 표준 입출력 함수를 기반으로 데이터 입출력 시 입출력 버퍼를 거친다. √ 입출력 버퍼에 데이터가 전송되는 시점 ▶ 호출된 출력함수가 반환이 되는 시점이 출력버퍼로 데이터가 완전히 전송된 시점이다. ▶ 엔터를 입력하는 시점이 키보드로 입력된 데이터가 입력버퍼로 전달되는 시점이다. 버퍼링을 하는 이유는 데이터 이동의 효율과 관련이 있다. 데이터를 모아서 전송하면, 하나씩 전송하는 것보다 효율적이다.

출력버퍼를 비우는 fflush 함수 윤성우의 열혈 C 프로그래밍 ▶ 인자에 해당하는 출력버퍼를 비운다. 출력버퍼를 비운다는 것은 출력버퍼에 저장된 데이터를 지우는 것이 아니라, 출력버퍼에 저장된 데이터를 목적지로 최종 전송함을 뜻한다. ▶ fflush(stdout) → 출력버퍼를 지워라! 출력버퍼의 경우와 달리 입력버퍼의 비움은 입력버퍼에 저장된 데이터의 소멸을 뜻한다. 그리고 fflush 함수는 출력버퍼를 대상으로 정의된 함수이다. 따라서 fflush(stdin) 과 같은 형태의 함수호출은 그 결과를 보장받지 못한다. 그렇다면 입력버퍼는 어떻게 비워야 할까?

입력버퍼는 어떻게 비워야 하나요? 윤성우의 열혈 C 프로그래밍 실행결과1 실행결과2 주민번호 앞 6자리만 입력 받기 위해서 배열의 길이가 널 문자 포함 7이다. 입력버퍼를 비우는 함수 실행결과1 엔터 키가 남아서 문제가 되는 상황 실행결과2 말 안 듣는 사람들 때문에 문제되는 상황 어떠한 경우에도 주민번호 6자리만 입력 받도록 재 구현된 예제

Chapter 21-5. 입출력 이외의 문자열 관련 함수 윤성우의 열혈 C 프로그래밍 Chapter 21-5. 입출력 이외의 문자열 관련 함수 윤성우 저 열혈강의 C 프로그래밍 개정판

문자열의 길이를 반환하는 함수: strlen 윤성우의 열혈 C 프로그래밍 문자열의 길이를 반환하는 함수: strlen size_t의 일반적인 선언 typedef unsigned int size_t; typedef에 관해서는 후에 설명 마지막에 삽입되는 널 문자를 없애는 예제 실행결과

문자열을 복사하는 함수들: strcpy, strncpy 윤성우의 열혈 C 프로그래밍 문자열을 복사하는 함수들: strcpy, strncpy 대표적인 문자열 복사 함수 str1에 저장된 문자열을 str2에 단순히 복사! str1에 저장된 문자열을 str2에 복사하되 최대 sizeof(str2)의 반환 값 크기만큼 복사한다. strcpy 함수를 호출하는 경우 배열의 범위를 넘어서 복사가 진행될 위험이 있다.

strncpy 함수를 잘못 사용한 예 윤성우의 열혈 C 프로그래밍 실행결과

문자열을 덧붙이는 함수들: strcat, strncat 윤성우의 열혈 C 프로그래밍 문자열을 덧붙이는 함수들: strcat, strncat strncat 함수는 덧붙일 문자열의 최대 길이를 제한한다. 최대 n개의 문자를 덧붙이되 널 문자 포함하여 n+1개의 문자를 덧붙인다. 실행결과 덧붙여지는 방식

문자열을 비교하는 함수들: strcmp, strncmp 윤성우의 열혈 C 프로그래밍 문자열을 비교하는 함수들: strcmp, strncmp strncmp는 최대 n개의 문자를 비교 ▶ 크고 작음은 아스키코드 값을 근거로 한다. ▶ A보다 B가, B보다 C가 아스키 코드 값이 더 크고 A보다 a가 , B보다 b가 아스키 코드 값이 더 크니, 사전편찬순서를 기준으로 뒤에 위치할 수록 더 큰 문자열로 인식해도 된다. 0보다 큰 값이 출력 0보다 작은 값이 출력 두 문자열이 같으면 0, 다르면 0이 아닌 값을 반환한다고 인식하고 있어도 충분하다!

윤성우의 열혈 C 프로그래밍 문자열 비교의 예 실행결과

그 이외의 변환함수들 윤성우의 열혈 C 프로그래밍 실행결과 헤더파일 stdlib.h에 선언 위의 함수들을 모른다면 문자열에 저장된 숫자 정보를 int형 또는 double형으로 변환하는 일은 번거로운 일이 될 수 있다. 실행결과

Chapter 21이 끝났습니다. 질문 있으신지요?