윤성우의 열혈 TCP/IP 소켓 프로그래밊

Similar documents
윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

YRRZBRRLMCEQ.hwp

Microsoft PowerPoint - 제9강 문자열

Microsoft PowerPoint - 10장 문자열 pptx

Microsoft PowerPoint - chap06-4 [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint Presentation

Microsoft PowerPoint - chap11-1.ppt [호환 모드]

11장 포인터

슬라이드 1

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings

설계란 무엇인가?

PowerPoint 프레젠테이션

13 주차문자열의표현과입출력

PowerPoint Template

Microsoft PowerPoint - 제11강 파일 처리

PowerPoint Presentation

1.1.1 컴퓨터의 구성 p.19

Microsoft PowerPoint 웹 연동 기술.pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밊

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

Microsoft PowerPoint - Chap14_FileAccess.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint - 09_(C_Programming)_(Korean)_File_Processing

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

03 상수, 변수, 자료형

PowerPoint 프레젠테이션

chap7.key

PowerPoint Presentation

Microsoft PowerPoint - chap4 [호환 모드]

歯9장.PDF

PA for SWE2007

C Programming

Microsoft PowerPoint - chap06-8 [호환 모드]

Microsoft PowerPoint - chap10-함수의활용.pptx

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - C++ 5 .pptx

제1장 Unix란 무엇인가?

Microsoft PowerPoint - [CPI16] Lecture 10 - 문자열.pptx

11장 포인터

PA for SWE2007

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

슬라이드 1

Microsoft PowerPoint - chap06-8.ppt

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

OCW_C언어 기초

11장 포인터

PA0 for SSE2033

PowerPoint 프레젠테이션

02장.배열과 클래스

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap4_2013 [호환 모드]

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

설계란 무엇인가?

PowerPoint Presentation

Microsoft PowerPoint - chap06-2pointer.ppt

C++ Programming

C 프로그램의 기본

Microsoft PowerPoint - chap-12.pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - chap06-5 [호환 모드]

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

금오공대 컴퓨터공학전공 강의자료

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

금오공대 컴퓨터공학전공 강의자료

The Pocket Guide to TCP/IP Sockets: C Version

이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것입니다. 2

11장 포인터

11장 포인터

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - 7_배열_문자열

<4D F736F F F696E74202D20C1A632B0AD20BAAFBCF6BFCD20C0DAB7E12C20C0FCC3B3B8AEBFCD20C0D4C3E2B7C2>

PowerPoint Presentation

윤성우의 열혈 TCP/IP 소켓 프로그래밍

C 언어 프로그래밊 과제 풀이

C Language Programming.hwp

C++ Programming

Microsoft Word - PLC제어응용-2차시.doc

쉽게풀어쓴 C 언어 Express 제 12 장문자와문자열 이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하

Microsoft PowerPoint - 10_C_Language_Text_Files

11장 포인터

11장 포인터

ch13

Microsoft PowerPoint - chap11-포인터의활용.pptx

11장 포인터

버퍼오버플로우-왕기초편 3.c언어에서버퍼사용하기 버퍼는 임시기억공간 이라는포괄적인개념이기때문에여러곳에존재할수있습니다. 즉, CPU 에도버퍼가존재할수있으며, 하드디스크에도존재할수있고, CD- ROM 이나프린터에도존재할수있습니다. 그리고앞의예제에서보신바와같이일반프로그램에도

Chapter_06

11장 포인터

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

PowerPoint 프레젠테이션

chap 5: Trees

2 단어별로읽어들이기 WORDTREE 2 2. 단어별로읽어들이기. 먼저입력스트림으로부터단어를선별하는함수부터작성하겠습니다. getword ( ) 함수는주어진입력을단어별로다루기위해서, 입력스트림으로부터단어를빼내는함수입니다. 여기서단어란글자 (letter) 로시작하면서글자와

Microsoft PowerPoint - chap1 [호환 모드]

Transcription:

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

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

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

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

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

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

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

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

문자입출력에서의 EOF 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 형변수에문자를담는이유는? 반환형이 char 형이아닌 int 형인이유는? char형은예외적으로 signed char가아닌 unsiged char로표현하는컴파일러가존재한다. 파일의끝에도달했을때반환하는 EOF는 -1로정의되어있다. char를 unsigend char로표현하는컴파일러는 EOF에해당하는 -1을반환하지못한다. int는모든컴파일러가 signed int로처리한다. 따라서 -1의반환에무리가없다.

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

문자열출력함수 : puts, fputs 인자로젂달되는문자열을출력한다. 단 fputs 함수는두번째인자를통해서출력의대상을지 정할수있다. puts 함수가호출되면문자열출력후자동으로개행이이뤄지 지만, fputs 함수가호출되면문자열출력후자동으로개행이 이뤄지지않는다는사실에주목! 실행결과

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

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

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

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

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

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

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

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

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

strncpy 함수를잘못사용한예 배열길이 str1 에딱맞는길이만큼만복 사를하겠다는의도의문장실행결과 두번째 strncpy 함수호출후의결과에이상이보이는이유는복사하는과정에서문 자열의끝을의미하는널문자가복사되지않았기때문이다. 문자열을복사할때에는 항상널문자의복사까지고려해야한다.

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

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

문자열비교의예 실행결과

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

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