strcpy
이 함수는 특정 문자열에서 NULL 문자를 인식할때까지의 모든 데이터를 다른 곳으로 복사한다.
char * strcpy(char * strDestination, const char * strSource);
// NULL 문자를 만나기 전까지 strSource에서 strDestination로 복사한다.
ex>
char string[5] = {0};
strcpy(string, "1234567890");
//컴파일은 정상으로 되나 실재 사용에서 에러가 날수있다.
그 이유는 overflow가 일어나기 때문으로 복사시 해당배열을 넘어도 메모리상의 배열과 붙어있는 영역에 복사를 한다.
이때 다른영역을 건드리기때문에 그 영역을 사용하지 않는다면 문제가 일어나지 않겠지만 그영역을 사용한다면 에러를 발생시킨다.
strcpy(string, "12345");
//이것또한 위와 같은 에러를 발생시키는데 이는 마지막에 NULL까지 복사를 진행하기때문에 overflow가 발생한다.
strcpy(string, "1234");
//1234와 NULL를 복사한다.
strncpy
strcpy와 동일하지만 복사할 문자열의 개수를 설정할 수 있다는 것이 다르다.
char * strncpy(char * strDestination, const char * strSource, size_t count);
// count만큼 strSource에서 strDestination로 복사한다.
또한 count보다 문자열이 작다면 NULL 문자를 만나기 전까지만 복사한다.
ex>
char string[5] = {0};
strncpy(string, "1234567890", 5);
//12345까지 복사가 이루어진다. 하지만 이것도 에러가 발생할 수 있다.
strncpy는 복사를 완료한 후 배열의 끝에 NULL값을 직접 넣어줘야 한다.
그렇지 않으면 출력시 12345를 출력하고 NULL을 만날때까지 이상한 문자가 출력될 것이다.
strncpy(string, "1234567890", 6);
//123456까지 복사가 이루어진다.
이것 또한 에러를 발생시키는데, 실재 배열보다 많은 문자를 복사함으로 생기는 overflow가 발생하기 때문이다.
strncpy(string, "12", 5);
//12까지 복사가 이루어지고 나머지는 NULL로 채워진다.
strncpy(string, "1234567890", 4);
string[4] = '\0';
//1234까지 복사가 이루어지고 마지막를 NULL로 채운다.
strlen
현재 문자열의 크기를 알고 싶은 경우 사용하는 함수로 문자열의 크기는 NULL문자까지의 문자 데이터의 수를 의미한다.
size_t strlen(const char * string);
// string의 크기를 리턴한다. 이때 NULL을 뺀 \r\n도 문자로 인식하여 리턴한다.
strcat
다른 문자열을 합치는 기능을 하는 함수이다.
char * strcat(char * strDestination, const char * strSource);
// strDestination의 뒤에 strSource를 복사한다.
ex>
char string[10] = "Help";
strcat(string, "1234567890");
//Help에 1234567890까지 복사가 이루어진다. 하지만 이것도 에러가 발생할 수 있다.
실재 배열보다 많은 문자를 복사함으로 생기는 overflow가 발생하기 때문이다.
strcat(string, "12");
//Help에 12와 마지막 NULL까지 복사한다.
strncat
strcat와 동일하지만 합칠 문자열의 개수를 설정할 수 있다는 것이 다르다.
char * strncat(char * strDestination, const char * strSource, size_t count);
// count만큼 strDestination의 뒤에 strSource를 복사한다.
ex>
char string[10] = "Help";
strncat(string, "1234567890", 5);
//Help에 12345까지 복사가 이루어진다. 하지만 이것도 에러가 발생할 수 있다.
strncpy와 같이 복사를 완료한 후 배열의 끝에 NULL값을 직접 넣어줘야 한다.
그렇지 않으면 출력시 Help12345를 출력하고 NULL을 만날때까지 이상한 문자가 출력될 것이다.
strncat(string, "1234567890", 10);
//Help에 1234567890까지 복사가 이루어진다.
이것 또한 에러를 발생시키는데, 실재 배열보다 많은 문자를 복사함으로 생기는 overflow가 발생하기 때문이다.
strncat(string, "12", 5);
//Help에 12와 NULL까지 복사가 이루어진다.
strncat(string, "1234567890", 5);
//Help에 12345까지 복사가 이루어지고 마지막를 NULL로 채운다.
strcmp
두 개의 문자열을 비교하여 서로 같은지를 나타내는 기능을 한다.
int strcmp(const char * string1, const char * string2);
// string1과 string2의 차이에 따라 리턴하는 정수의 값이 틀리다.
0 보다 작으면 |
string1 < string2 |
0 보다 크면 |
string1 > string2 |
0 이면 |
string1 = string2 |
ex>
strcmp("ab", "ab"); //0를 리턴한다.
strcmp("ab", "ac"); //-1를 리턴한다.
strcmp("ab", "abc"); //-1를 리턴한다.
strcmp("ac", "ab"); //1를 리턴한다.
strcmp("abc", "ab"); //1를 리턴한다.
strncmp
strcmp와 동일하지만 비교할 문자열의 개수를 설정할 수 있다는 것이 다르다.
int strncmp(const char * string1, const char * string2, size_t count);
// count만큼 비교하여 string1과 string2의 차이에 따라 리턴하는 정수의 값이 틀리다.
ex>
strncmp("ab", "ab", 3); //0를 리턴한다.
strncmp("abcd", "abcf", 3); //0를 리턴한다.
strncmp("ab", "ac", 3); //-1를 리턴한다.
strncmp("abc", "abf", 3); //-1를 리턴한다.
strncmp("ac", "ab", 3); //1를 리턴한다.
strncmp("abf", "abc", 3); //1를 리턴한다.
strchar
문자열 안에 특정 문자가 존재하는지 여부를 체크하는 함수이다.
char * strchr(const char * string, int c);
ex>
char string[100] = "1234567890";
strchr(string, '8');
// string에서 '8'을 검색해 해당 문자 위치를 포인터로 리턴한다.
strstr
문자열 안에 특정 문자열이 존재하는지 여부를 체크하는 함수 이다.
char * strstr(const char * string, const char * strCharSet);
ex>
char string1[100] = "1234567890";
char string2[] = "890";
strstr(string1, "123");
strstr(string1, string2);
// string에서 strCharSet을 검색해 해당 문자열 위치를 포인터로 리턴한다.
atoi
문자열을 정수형인 int 타입으로 변환하는 함수이다.
int atoi(const char * string);
ex>
char string[] = "12345";
atoi(string); //정수 12345를 리턴한다.
atoi("-12345"); //정수 -12345를 리턴한다.
atoi("123.45"); //정수 123를 리턴한다.
atoi("123ab"); //정수 123를 리턴한다.
_itoa
정수형을 문자열인
char 타입으로 변환하는 함수이다.
char *_itoa( int value, char *string, int radix );
ex>
char buffer[20];
_itoa( i, buffer, 10 );
// i : 문자로 변경하고자 하는 숫자가 들어있는 변수
// buffer : 숫자를 문자로 변경할때 문자가 들어가는 변수
// 10 : 숫자를 어떤 진수 형태로 문자로 변경할것인가를 정의 해주는 값
// 10=> 10진수, 16=> 16진수....
atof
atoi와 비슷하지만 부동소수점을 리턴하는 것이 다르다.
double atof(const char * string);
ex>
char string[] = "123.45";
atof(string); //소수 123.45를 리턴한다.
atof("-123.45"); //소수 -123.45를 리턴한다.
atof("123"); //소수 123.00를 리턴한다.
atof("123ab"); //소수 123.00를 리턴한다.
atol
atoi와 비슷하지만 long타입형을 리턴하는 것이 다르다.
long
atol(const char * string);
strtime
이 함수는 사용자가 지정한 형식대로 현재시간을 문자열로 출력하는 함수이다.
size_t strtime(char * strDest, size_t maxsize, const char * format, const struct tm * timeptr);
형식 |
설명 |
결과 |
예제 |
a |
요일, day of week |
세 문자 영어 약어 |
Sun |
A |
요일, day of week |
영어 전체 이름 |
Sunday |
b |
월, month |
세 문자 영어 약어 |
Dec |
B |
월, month |
영어 전체 이름 |
December |
c |
날짜/시간 |
두 자리씩, 월/일/년 시/분/초 |
12년 9월 6일 23시 58분 |
d |
일, day |
두 자리(01 - 31) |
10 |
H |
시, hour |
24시간 형식의 두 자리(00 - 23) |
0 |
I |
시, hour |
12시간 형식의 두 자리(01 - 12) |
12 |
j |
일수, day of year |
세 자리(001 - 366) |
344 |
m |
월, month |
두 자리(01 - 12) |
12 |
M |
분, minute |
두 자리(00 - 59) |
39 |
p |
시, hour |
두 문자, AM 또는 PM |
AM |
S |
초, second |
두 자리(00 - 59) |
50 |
U |
주, week of year |
두 자리(00 - 53) |
50 |
w |
요일, day of week |
한 자리(0 - 6) |
0 |
W |
주, week of year |
두 자리(00 - 53) |
49 |
x |
날짜, date |
두 자리씩, 월/일/년 |
2012년 10월 6일 |
X |
시간, time |
두 자리씩, 시/분/초 |
0시 42분 40초 |
y |
년, year |
두 자리(00 - 99) |
6 |
Y |
년, year |
네 자리(0000 - 9999) |
2006 |
z, Z |
시간대, time zone |
레지스트리 정의 사용 |
대한민국 표준시 |
% |
%, percent |
한 문자, % 기호 |
% |
ex>
time_t cur;
struct tm* ptm;
char buf[100] = {0};
cur = time(NULL);
ptm = localtime(&cur);
//현재 시간을 얻어온다.
strftime(buf, sizeof(buf), "%c", ptm);
//12/10/06 15:30:05
strftime(buf, sizeof(buf), "%m/%d/%y %H:%M:%S", ptm);
//12/10/06 15:30:05
strftime(buf, sizeof(buf), "%Y년 %#m월 %#d일 %#I시 %#M분 %#S초", ptm);
//2006년 12월 10일 3시 30분 5초
strftime(buf, sizeof(buf), "%I:%M %p", ptm);
//03:30 PM
// 위 함수를 사용하기 위해서는 localtime(...); 함수로 시간을 우선 얻어와야 한다.
참고 : 위의 strtime함수 사용시 include <time.h>을 추가해야 한다.
strtime함수를 제외한 함수들을 사용시 include <iostream>을 추가해야 한다.
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
[C++] 값에 의한 객체의 반환(Returning Objects by Value) (0) | 2009.05.14 |
---|---|
링크드 리스트 정의, 종류 (0) | 2009.05.12 |
strlen, strcpy, strcat, strcmp 함수 구현 [소스] (0) | 2009.05.05 |
malloc 메모리 할당 및 해제 / 재 할당 (0) | 2009.05.05 |
배열 stack / 단순연결리스트 stack (0) | 2009.05.04 |