Backend/C 32

strcpy()함수

char *strcpy(char *destination, char *source); 함수 strcpy()는 source가 가리키고 널 문자를 포함하는 문자열을 destiation이 가리키는 곳으로 복사한다. 복귀 값은 새로운 문자열 destination 에 대한 포인터이다. strcpy() 를 사용할 때는 우선 목적 문자열을 저장하기 위한 영역을 할당해야 한다. 함수는 destination이 이미 할당되어 있는 영역인지 알 수 없다. 메모리 영역이 할당되지 않았다면 함수는 destination에서부터 시작해서 strlen(source)만큼의 메모리 영역을 덮어쓸 것이다. 이것은 에상할 수 없는 문제를 일으킬 수 있다. 1 : #include 2 : #include 3 : #include 4 : char ..

Backend/C 2012.04.12

Hello, World!

1 : #include 2 : void main(){ 3 : printf("Hello, World ! "); 4 : } 항상, 모든 C 언어 제일 첫 과에 나오는 코드이죠. 간단해 보이지만 저 4줄의 코드에는 많은 의미가 있답니다. 우선 첫번째 라인의 소스를 볼까요, #include 라고 표시되어 있습니다. include 는 영어 사전에서 찾아보면 "포함하다" 라는 뜻을 가지고 있습니다. 이 1번 라인에서는, "stdio.h라는 헤더 파일을 포함하라" 라는 의미가 되겠지요. 자, 그럼, stdio.h는 무슨 파일 일까요?? stdio.h의 stdio는 "standard input and output" 의 약자이고요, stdio.h는, "C에서 표준 입출력을 제공해주는 Library들이 모여있는 선언파일"..

Backend/C 2012.04.12

About C Language

Wiki 의 내용 벨 연구소에서 1971년경부터 리치(D.M.Ritchie) 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어이다. UNIX 오퍼레이팅 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었다. 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것 등을 특징으로 하고 있다. 시스템 기술(記術)용 언어의 경우에는 기억장치의 주소(어드레스) 등과 같은 하드웨어 자원까지 기술(記術)의 대상으로 할 것을 요구하고 있는데, C언어에서는 이러한 수준의 개념을 데이터 형이나 함수 등의 고수준 언어의 개념에 잘 대응하고 있다. 따라서 언어의 성격상 일반적인 범용의 언어와 거의 다를 바가 없다. 프로그램을 다른 종류의 컴퓨터에 이식..

Backend/C 2012.04.12

glib의 간단한 사용법

리눅스 개발자 및 엔지니어라면 누구나 GNOME 에 대해서 들어봤을 것이다. GNOME은 리눅스 사용자들에게 UI 및 데스크탑 어플리케이션을 제공하는 프로젝트라 할 수 있다. 따라서 윈도우만 쓰던 유저도 이 GNOME을 이용해 리눅스를 윈도우처럼 편하게 쓸 수 있다고 한다. (난 검은창만 써서..ㅋㅋㅋㅋ) 단지 UI뿐만 아니라, 워크나 스프레드 시트, 브라우저 등등의 유용한 어플리케이션도 제공한다. 오늘 포스팅할 내용은 이 GNOME 에서 만든 Glibc에 대한 것이다. Glib에는 개발자가 직접 만들지 않아도 쉽게 가져다 쓸 수 있는 유용한 라이브러리가 많이 있다. 나도 팀장님이 추천해 주셔서 이 사이트를 알게 되었는데, 사용해보니 쉽고 간단하다. Glib 페이지 바로가기 지금 나와있는 최신 버전인 2..

Backend/C 2012.04.12

Memmove

너무 오랫만에 쓰는 C언어 포스팅이넹.. 오늘 개발 하다가.. memmove라는 함수를 사용하게 되었는데 까먹지 않기 위해서^^; 급 포스팅!! 사실 memory 관련 함수는 memcmp, memcpy 등만 사용했는데 이번에 memmove라는 함수도 있다는걸 알았다. 우선 MAN 페이지를 보면.. 다음과 같이 나온다 NAME memmove - copy memory area SYNOPSIS #include void *memmove(void *dest, const void *src, size_t n); DESCRIPTION The memmove() function copies n bytes from memory area src to memory area dest. The memory areas may ove..

Backend/C 2012.04.12

valgrind

Valgrind : Linux-x86 용 실행 파일의 디버깅과 프로파일링을 위한 오픈 소스 툴. Valgrind는 Memcheck이나 Addrcheck 툴을 사용하여 실행중인 프로그램에서 메모리 누출(leak)/오염(corruption)을 찾아낼 수 있다. 그 외의 Cachegrind, Helgrind 툴을 사용하여 캐쉬 프로파일링을 하거나, 멀티 쓰레드에서의 데이타 경쟁을 발견을 할 수 있다. 64Bit Linux는 지원하지 않는다. Valgrind 에는 다음과 같이 다양한 툴들이 있다. 1. Memcheck - 초기화되지 않은 메모리의 사용 - free된 메모리에 읽기/쓰기를 시도하는 경우 - malloc된 메모리 블럭 외에 읽기/쓰기를 시도하는 경우 - stack의 부적절한 지역에 읽기/쓰기가 시도..

Backend/C 2011.05.26

gprof

gprof : 프로그램 수행시간동안 각 함수의 호출 횟수와 함수 호출시 진입에서 종료할때 까지 시간을 기록해 두고, 이 정보에 대한 통계를 제공하는 방식의 디버거이다. 사용법은 매우..간편하다 -_ - 심플한 사용법은 다음과 같다. ! 프로그램은 Makefile을 사용해 컴파일하지 않고 단순히 gcc를 사용해 컴파일하였다. Makefile 사용 시에도 아래와 같이 -pg옵션을 넣어주면 된다. 1. -pg 옵션을 넣어서 컴파일한다. [whitelka]$ gcc -o main main.c -pg 2. 생성된 파일을 실행한다. main main.c main.h main_profile sample.c url.txt [whitelka]$ ./main 3. 파일이 실행되면 gmon.out 이라는 파일이 생성된다. ..

Backend/C 2011.05.26

GDB

GDB란? GDB는 프로그램 실행동안 프로그램 내부에서 진행되고 있는 상황들을 Line by Line으로 훑어볼 수 있는 툴이다. GDB는 다음과 같은 일을 한다. 프로그램을 시작할때 프로그램의 행동에 영향을 줄수 있는 것을 지정할수 있다. 프로그램을 지정된 조건에서 멈추도록 만든다. 프로그램이 멈추었을때 무엇이 일어났는지를 시험할수 있다. 프로그램 내의 어떤것을 바꾸어서, 버그를 고칠수 있도록 테스트 할수 있다. C나 C++로 쓰여진 프로그램을 디버깅하기 위해 GDB를 사용할수 있다. 다음은 간단한 gdb 사용 예이다. ////////////////////////////////////////////////////////////////////////////////////// [whitelka]$ gdb ..

Backend/C 2011.05.26

memset()을 이용하여 메모리를 채워보자

1. 함수원형 void *memset(void *s, int c, size_t n); 2. 기능 s가 지정하는 번지에 c값을 n의 크기만큼 채움 c는 int형이지만 1바이트(char)로 인식된다. 3. 리턴값 s의 포인터 4. 예제 1 : #include 2 : #include 3 : #include 4 : #define SIZE 50 5 : int main(void){ 6 : 7 : int *s = (int*)malloc(sizeof(int)*SIZE); //메모리 할당 8 : int i; 9 : 10 : memset(s,'r',sizeof(int)*SIZE); // s가 가리키는곳을 'r'로 채운다 11 : 12 : for(i=0;i

Backend/C 2011.05.20
반응형