PA for SWE2007

Similar documents
PA for SWE2007

PA0 for SSE2033

슬라이드 1

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

PA for SWE2007

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

Computer Programming (2008 Fall)

untitled

PowerPoint 프레젠테이션


Microsoft PowerPoint - 제9강 문자열

YRRZBRRLMCEQ.hwp

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

설계란 무엇인가?

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

11장 포인터

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

歯7장.PDF

chap7.PDF

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

PowerPoint 프레젠테이션

11장 포인터

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - 7_배열_문자열

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - chap06-2pointer.ppt

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

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

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

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

Microsoft PowerPoint - chap-12.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

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

11장 포인터

11장 포인터

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

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

Microsoft PowerPoint - chap06-8.ppt

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

슬라이드 1

C++ Programming

Microsoft PowerPoint - additional01.ppt [호환 모드]

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

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

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - Lesson2.pptx

11장 포인터

PowerPoint Template

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - chap-03.pptx

OCW_C언어 기초

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

C 프로그래밊 개요

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

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

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A632B0AD20BAAFBCF6BFCD20C0DAB7E12C20C0FCC3B3B8AEBFCD20C0D4C3E2B7C2>

PowerPoint Presentation

11장 포인터

11장 포인터

6주차.key

ch13

11장 포인터

리눅스 취약점대응방안권고 / KISA 취약점점검팀 영향받는플랫폼 OS, FAQ 추가 개요 미국보안회사 에의해 시스템의 라이브러리 의특정함수에서임의코드를실행할수있는취약점이공개 해당취약점은 CVE 지정, 도메인네임을

문서의 제목 나눔명조R, 40pt

Microsoft PowerPoint - chap12-고급기능.pptx

BMP 파일 처리

쉽게 풀어쓴 C 프로그래밍

컴파일러

<4D F736F F F696E74202D20C1A63132C0E520B9AEC0DABFCD20B9AEC0DABFAD>

PowerPoint 프레젠테이션

Algorithms

쉽게 풀어쓴 C 프로그래밍

본 강의에 들어가기 전

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

Microsoft PowerPoint - 10장 문자열 pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

C# Programming Guide - Types

02장.배열과 클래스

Chapter #01 Subject

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint Presentation

제1장 Unix란 무엇인가?

Microsoft PowerPoint - 제12장 문자열(강의)

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

중간고사

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

ch15

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint 프레젠테이션

Transcription:

SWE2007: Software Experiment II (Fall 2014) Programming Assignment #0: Making own "string_sw.h" Due: 22nd Sep. (Mon), 11:59 PM 1. Introduction 이번과제에선, 앞으로있을다른과제들을수행하기위한필요할함수들을구현한다. 그대상은, 문자열조작 / 검사 / 변환함수들을담은 C 표준라이브러리의 <string.h> 를비롯한헤더파일의 일부함수이다. 그리고본과제의다른목적은학생이각자독자적인 Linux 환경을갖추는것이다. 2. Problem specification 본과목에서과제를수행할때, Linux 시스템콜과같은일부특수한함수들을제외하곤 C 표준라이브러리나다른라이브러리함수들을사용하는것이허락되지않는다. 따라서자신이필요한함수들을직접구현해야하는데, C 표준라이브러리의 <string.h> 를비롯한문자열을이용하는함수들은앞으로거의모든과제에서필요할것이기때문에, Linux 환경에서이함수들을직접구현해본다. 구현할함수와각함수의기능은다음과같다 : (C 표준함수의경우, 정확한함수정의를찾는방법은 5. Background 에서따로설명한다. 밑줄을친함수들은 C 표준함수가아님을뜻하고, 해당함수들에대한정의는 Section 2.1. 에서설명한다. atoi2, atol2 함수는 C 표준 atoi, atol 함수를구현한뒤, 명시된대로이름을바꾼다.) Conversions string to numeric formats: int atoi2 (const char *str); - 문자열 str을정수형 int로변환하여출력 [int는 32비트정수형으로간주 ] long atol2 (const char *str); - 문자열 str을정수형 long으로변환하여출력 [long은 64비트정수형으로간주 ] Conversions numeric formats to string: char *int2str (char *dest, int num); - 정수형 num을문자열로변환한뒤문자열버퍼 dest에저장 - [int:-543210 C string:"-543210"] String manipulation: char *strcpy (char *dst, const char *src); - 문자열 src 를문자열버퍼 dst 로복사

char *strncpy (char *dst, const char *src, size_t count); - 문자열 src에서 count 바이트만큼문자열버퍼 dst로복사 char *strcat (char *dst, const char *src); - 문자열 dst의뒤에, 문자열 src을붙임 char *strncat (char *dst, const char *src, size_t count); - 문자열 dst의뒤에, 문자열 src를 count 바이트만큼붙임 char *strdup (const char *str); - 문자열 str을동적으로할당받은메모리에 (malloc 등 ) 복사한뒤해당주소를반환 String examination: size_t strlen (const char *str); - 문자열 str의길이를반환 int strcmp (const char *lhs, const char *rhs); - 문자열 lhs, rhs을비교 int strncmp (const char *lhs, const char *rhs, size_t count); - 문자열 lhs, rhs를최대 count 바이트만비교 char *strchr (const char *str, int ch); - 문자열 str에서문자 ch가처음나타나는위치를찾음 char *strrchr (const char *str, int ch); - 문자열 str에서문자 ch가마지막으로나타나는위치를찾음 char *strpbrk (const char *str, const char *accept); - 문자열 str에서 문자열 accept의아무문자 가처음으로등장하는위치를찾음 char *strstr (const char *str, const char *substr); - 문자열 str에서부분문자열 substr이처음으로등장하는위치를찾음 char *strtok (char *str, const char *delim); - 문자열 str에서 문자열 delim의아무문자 가등장하는위치를찾고, token화함 char *strtok_r (char *str, const char *delim, char **saveptr); - strtok 함수와동일하지만다음 token을처리할위치를담는 saveptr 변수를사용 Character array manipulation: void *memcpy (void *dest, const void *str, size_t n); - 메모리주소 str에서 n 바이트만큼메모리주소 dest로복사 void *memset (void *dest, int ch, size_t count); - 메모리주소 [dest. dest+count) 의값을 ch 로변경 각함수들은 C 표준함수들이제공하는기능과 100% 동일하게구현하면되고, 다른기능을추가 할필요는없다.

2.1. Definition of int2str, strdup, and strtok_r functions char *int2str (char *dest, int num); 숫자 num을 C 문자열형태로바꿔 dest에저장하고, 변환된문자열을반환한다. ( 일반적인경우, 반환값은 dest가될것이다.) 즉, 바뀐문자열이반환된다는점을제외하면, 다음함수호출과동일한행동이수행되어야한다 : sprintf(dest, "%d", num); 예외 ) 인자 dest가 NULL일경우, 동적으로메모리를받고해당주소에변환한문자열을저장한다음, 그주소를반환한다. 동적메모리할당에실패하면 NULL을반환한다. 참고 ) int형을문자열로변환할경우, 최악의경우 NULL 캐릭터를포함하여 char[12] 버퍼가필요하다. char *strdup (const char *str); 동적으로메모리를할당받고, 해당주소에문자열 str의내용을복사한뒤, 해당주소를반환한다. 예외 ) 메모리를동적으로할당받을수없다면, NULL을반환한다. 참고 ) $ man 3 strdup char *strtok_r (char *str, const char *delim, char **saveptr); 기본적으로 strtok 함수와동일하지만, 연속적으로 strtok[_r] 함수를호출할때차이점이있다. strtok 함수는함수내부의버퍼를두어다음에처리할주소를저장하지만, strtok_r 함수는내부의버퍼대신 saveptr에주소를담아그주소를사용한다는차이점이있다. str이존재하면첫째토큰을처리하고, 다음부터처리할주소를 saveptr에담은뒤, 토큰의주소를반환한다. str이 NULL이라면, saveptr에담긴주소를가져와다음토큰을처리하고다음에처리할주소로 saveptr을업데이트한뒤, 토큰의주소를반환한다. 더이상토큰을생성할수없으면 NULL을반환한다. 참고 ) $ man 3 strtok_r 참고 ) saveptr에담길주소에정답은없으니스스로판단한다. 3. Skeleton codes 이번과제수행을위해다음 1 개의파일이주어진다 : string_sw.h: 본과제에서지정한함수들이들어있는헤더파일 string_sw.h 를이용하여새로운 C 파일을생성하고, 해당 C 파일에 string_sw.h 파일의함 수들을구현한다.

4. Verification of your code 다음그림과같이검사용파일을만들어서, <string.h> 과 <stdlib.h> 를 "string_sw.h" 로 바꿨을때구현한함수가같은이름의라이브러리함수와동일한결과물을생성하는지비교해본 다. #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char str1[20] = "Hello"; char str2[20] = "world!"; printf("<strlen> str1: %zu\n", strlen(str1));... } return 0; #include <stdio.h> #include "string_sw.h" int main() { char str1[20] = "Hello"; char str2[20] = "world!"; printf("<strlen> str1: %zu\n", strlen(str1));... } return 0; 5. Background 5.1. Man page 본과목의과제를수행하며 man page (manual pages) 를참고할수있다. man page는 Unix-like 환경에서제공하는참고용매뉴얼프로그램이다. 어떤함수의정의나프로그램의역할이궁금하면셸에서다음커맨드를입력함으로써정보를찾아볼수있다. $ man <COMMAND_OR_FUNCTION_NAME>

예를들면, strlen 함수에대한정의를찾아보고싶을땐, "$ man strlen" 을입력한다. printf 와같은함수는동명의프로그램과라이브러리함수가같이존재하는데, 이럴경우엔라 이브러리섹션을지정해서 man 프로그램을호출한다. ( 참고 : http://en.wikipedia.org/wiki/man_page) $ man 3 printf 만약 man 프로그램이제대로동작하지않을경우, Ubuntu 의경우다음명령어를입력함으로써 라이브러리에대한매뉴얼을다운로드할수있다. 다음명령수행엔관리자권한이필요하다. $ sudo apt-get install manpages-dev manpages-posix-dev 5.2. C References C 라이브러리함수에대한 reference는다음사이트를참고한다 : http://www.cplusplus.com/reference/clibrary/ http://en.cppreference.com/w/ 6. Restrictions 함수구현시 malloc(), calloc(), free() 함수를제외한다른라이브러리함수는사용할수 없다. 필요하다면, 직접구현하여사용한다. 7. Hand in instruction 작성한코드상단의주석에이름과학번을작성한다. 작성한 c 파일의이름을 " 학번.c" 로바꾼다. (e.g., 2008311920.c) 본과제수행시구현방법과디자인을설명하는보고서를 PDF 포맷으로작성하여 " 학 번.pdf" 이란이름을붙인다. ( 가능하면 PDF 가가장좋지만, 대중적인문서포맷은다른 포맷도괜찮음 ) 보고서에는본인이구현한 Linux 환경에대한스크린샷을첨부한다. 추가적으로, Linux 셸에서다음 3 가지명령을실행시킨결과를같이첨부한다. $ cat /proc/version $ cat /etc/issue $ lsb_release -a 과제를제출하기위해 [wooyeong at csl.skku.edu] 주소로메일을보낸다. 메일전송시 전술한코드파일과문서파일을각각첨부하고 ( 압축하지말것!), 메일제목은다음과같

이명명한다 : [SWE2007] PA #0, 학번, 이름 8. Logistics 본과제는혼자수행한다. 제출상태는과목홈페이지 http://csl.skku.edu/swe2007f14/projects 에즉각적으로공지될것이다. 과제제출시간은메일도착시간을기준으로하며, 과제를지연제출하면기한직후부터매 8시간마다점수를 10% 씩추가로감점한다. 다른사람의과제를 copy할경우, 개입한사람전부해당과제에대해 0점처리되고, 교수님께보고되며, 성적산정에불이익이있다. 또한, copy가두차례이상적발될경우 F 학점이부여될수있다. Have fun! 정우영, 담당조교 컴퓨터시스템연구실