PA0 for SSE2033

Similar documents
PA for SWE2007

PA for SWE2007

슬라이드 1

PA for SWE2007

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

PowerPoint 프레젠테이션

Computer Programming (2008 Fall)

PowerPoint 프레젠테이션


<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

YRRZBRRLMCEQ.hwp

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

Microsoft PowerPoint - 제9강 문자열

설계란 무엇인가?

11장 포인터

untitled

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

歯7장.PDF

chap7.PDF

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

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

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

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

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

11장 포인터

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

본 강의에 들어가기 전

PowerPoint Presentation

PowerPoint 프레젠테이션

11장 포인터

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

11장 포인터

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

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

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

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

C 프로그래밊 개요

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

슬라이드 1

C++ Programming

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

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

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

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

Microsoft PowerPoint - chap-12.pptx

11장 포인터

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 - C++ 5 .pptx

Microsoft PowerPoint - chap06-8.ppt

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

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

Microsoft PowerPoint - Lesson2.pptx

PowerPoint Template

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

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - chap-03.pptx

OCW_C언어 기초

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

PowerPoint 프레젠테이션

C# Programming Guide - Types

쉽게 풀어쓴 C 프로그래밍

02장.배열과 클래스

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

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

<4D F736F F F696E74202D20C1A632B0AD20BAAFBCF6BFCD20C0DAB7E12C20C0FCC3B3B8AEBFCD20C0D4C3E2B7C2>

PowerPoint Presentation

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

6주차.key

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

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

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

BMP 파일 처리

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

제1장 Unix란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Microsoft PowerPoint - chap01-C언어개요.pptx

PowerPoint 프레젠테이션

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

설계란 무엇인가?

Chapter #01 Subject

Microsoft PowerPoint - 7_배열_문자열

Infinity(∞) Strategy

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint - chap12-고급기능.pptx

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint - 10장 문자열 pptx

중간고사

컴파일러

PowerPoint 프레젠테이션

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

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 \

Transcription:

SSE2033: System Software Experiment II (Spring 2016) Programming Assignment #0: Making own "my_string.h" Due: 21st Mar. (Mon), 11:59 PM 1. Introduction 이번과제에선, 앞으로있을다른과제들을수행하기위한필요할함수들을구현한다. 그대상은, 문자열조작 / 검사 / 변환함수들을담은 C 표준라이브러리의 <string.h> 를비롯한헤더파일의일부함수이다. 그리고본과제의다른목적은학생이각자독자적인 Linux 환경을갖추는것이다. 또한, 간단한문자열및포인터조작을통해향후원활한과제수행을돕고자한다. 2. Problem specification 본과목에서과제를수행할때, Linux 시스템콜과같은일부특수한함수들을제외하곤 C 표준라이브러리나다른라이브러리함수들을사용하는것이허락되지않는다. 따라서자신이필요한함수들을직접구현해야하는데, C 표준라이브러리의 <string.h> 를비롯한문자열을이용하는함수들은앞으로거의모든과제에서필요할것이기때문에, Linux 환경에서이함수들을직접구현해본다. 또한, 향후과제에서본인이필요한함수는 my_string.c 및.h에구현하여사용할수있다. 구현할함수와각함수의기능은다음과같다. 각함수들은 C 표준함수들이제공하는기능과 100% 동일하게구현하면되고, 다른기능을추가할필요는없다. (C 표준함수의경우, 정확한함수정의를찾는방법은수업시간에설명한대로리눅스매뉴얼 페이지 man 을사용하도록한다. 밑줄을친함수들은 C 표준함수가아님을뜻하고, 해당함수들 에대한정의는 Section 2.1. 에서설명한다.) strtok_r 을구현하지않아도되나, 구현할시에는추가점수를받을수있다.

Conversions string to numeric formats: int my_atoi (const char *nptr); - 문자열 str을정수형 int로변환하여출력 long my_atol (const char *nptr); - 문자열 str을정수형 long으로변환하여출력 Conversions numeric formats to string: char *int2str (char *dest, int num); - 정수형 num을문자열로변환한뒤문자열버퍼 dest에저장 - [int:-543210 C string:"-543210"] String manipulation: char *strcpy (char *dest, const char *src); - 문자열 src를문자열버퍼 dst로복사 char *strncpy (char *dest, const char *src, size_t n); - 문자열 src에서 count 바이트만큼문자열버퍼 dst로복사 char *strcat (char *dest, const char *src); - 문자열 dst의뒤에, 문자열 src을붙임 char *strncat (char *dest, const char *src, size_t n); - 문자열 dst의뒤에, 문자열 src를 count 바이트만큼붙임 char *strdup (const char *str); - 문자열 str을동적으로할당받은메모리에 (malloc 등 ) 복사한뒤해당주소를반환 char *int2str (char *dest, int num); 숫자 num을 C 문자열형태로바꿔 dest에저장하고, 변환된문자열을반환한다. ( 일반적인경우, 반환값은 dest가될것이다.) 즉, 바뀐문자열이반환된다는점을제외하면, 다음함수호출과동일한행동이수행되어야한다 : sprintf(dest, "%d", num); 예외 ) 인자 dest가 NULL일경우, 동적으로메모리를받고해당주소에변환한문자열을저장한다음, 그주소를반환한다. 동적메모리할당에실패하면 NULL을반환한다. 힌트 ) int형을문자열로변환할경우, 최악의경우 NULL 캐릭터를포함하여 char[12] 버퍼가필요하다.

String examination: size_t strlen (const char *s); - 문자열 s의길이를반환 int strcmp (const char *s1, const char *s2); - 문자열 s1, s2를비교 int strncmp (const char *s1, const char *s2, size_t n); - 문자열 s1, s2를최대 n 바이트만비교 char *strchr (const char *s, int c); - 문자열 s에서문자 c가처음나타나는위치를찾음 char *strrchr (const char *s, int c); - 문자열 s에서문자 c가마지막으로나타나는위치를찾음 char *strstr (const char *haystack, const char *needle); - 문자열 haystack에서부분문자열 needle이처음으로등장하는위치를찾음 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 로변경 char *strdup (const char *str); 동적으로메모리를할당받고, 해당주소에문자열 str의내용을복사한뒤, 해당주소를반환한다. 예외 ) 메모리를동적으로할당받을수없다면, NULL을반환한다. 참고 ) $ man 3 strdup strtok_r 은구현할시선택사항으로, 성공하면추가점수가있다. 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 이번과제수행을위해다음 3 개의파일이주어진다 : my_string.h: my_string.c: test.c: 본과제에서지정한함수들이들어있는헤더파일 본과제에서지정한함수들의구현파일 구현한함수들의디버깅용파일 Skeleton codes 들은전부 C library 함수를단순히 wrapping하는꼴로이루어져있으며, 이를자신만의코드로바꾸어야한다. 4. Verification of your code 제공한 test.c 파일을이용해각자자유롭게자신들이만든함수가라이브러리함수와동일한지비교할수있다. 예시는아래와같다. #include <stdio.h> #include <string.h> #include <stdlib.h> #include "my_string.h" int main() { char str1[20] = "Hello"; char str2[20] = "world!"; printf("<strlen> str1: %zu\n", strlen(str1)); printf("<strlen> str1: %zu\n", my_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 작성한코드상단의주석에이름과학번을작성한다. 본과제수행시구현방법과디자인을설명하는보고서를 PDF 포맷으로작성하여 "README.pdf" 이란이름을붙인다. ( 가능하면 PDF가가장좋지만, 대중적인문서포맷은다른포맷도괜찮음 )

보고서에는본인이구현한 Linux 환경에대한스크린샷을첨부한다. Linux 셸에서다음 3 가지명령을실행시킨결과를같이첨부한다. $ cat /proc/version $ cat /etc/issue $ lsb_release -a test.c 파일을제외하고, my_string.c, my_string.h, README.pdf, screenshot 총 4 개의파일을 tar 로압축한다. 이때, 압축하는파일이름은반드시본인학번으로한다. Ex) 학번이 2014123456 인경우, $ tar -cvzf 2014123456.tar.gz my_string.c my_string.h README.pdf screenshot 과제를제출하기위해 [dylee@csl.skku.edu] 주소로메일을보낸다. 메일전송시압축한 tar 파일하나만첨부하도록하며, 메일제목은다음과같이명명한다 : [SSE2033] 학번이름 PA#0 [SSE2033] 2014123456 홍길동 PA#0 8. Logistics 본과제는혼자수행한다. 질문또한 dylee@csl.skku.edu에메일로보내며, 메일제목앞에는필히 [SSE2033] 을쓰도록한다. 제출상태는과목홈페이지 http://csl.skku.edu/sse2033s16/projects 에즉각적으로공지될것이다. 과제제출시간은메일도착시간을기준으로하며, 과제를지연제출하면기한직후부터매 8시간마다점수를 10% 씩추가로감점한다. 다른사람의과제를 copy할경우, 개입한사람전부해당과제에대해 0점처리되고, 교수님께보고되며, 성적산정에불이익이있다. 또한, copy가두차례이상적발될경우 F 학점이부여될수있다. Warming up! Dong-Yun Lee, TA Computer Systems Laboratory, Sungkyunkwan Univ.