
Dãy kí tự
Dãy kí t có th đ c thay đ i n i dung c a nó mà không c n đ n ự ể ượ ổ ộ ủ ầ ế th vi n chu nư ệ ẩ . Tuy
nhiên, th vi n này có nhi u hàm có th dùng cho c dãy kí t có k t thúc 0 và m ngư ệ ề ể ả ự ế ả
không có kí t k t thúc ki u char. Trong ph n này t "dãy" đ c đ ch dãy kí t .ự ế ể ầ ừ ượ ể ỉ ự
Các hàm th ng dùng là:ườ
•strcat(dest, source) - n i m t dãy kí t source ti p vào v trí cu i c a dãy kí t destố ộ ự ế ị ố ủ ự
•strchr(source, c) - tìm v trí s xu t hi n đ u tiên c a c trong dãy kí t source và trị ự ấ ệ ầ ủ ự ả
v con tr ch t i v trí đó hay con tr tr ng n u c không tìm th y trong sourceề ỏ ỉ ớ ị ỏ ố ế ấ
•strcmp(a, b) - so sánh hai dãy kí t a và b (theo th t t đi n); tr v s âm n u aự ứ ự ừ ể ả ề ố ế
nh h n b, 0 n u chúng b ng nhau, d ng n u a l n h nỏ ơ ế ằ ươ ế ớ ơ
•strcpy(dest, source) - chép và thay các kí t c a dãy dest vào dãy destự ủ
•strlen(st) - tr v đ dài c a stả ề ộ ủ
•strncat(dest, source, n) - n i t i đa n kí t t dãy source ti p vào v trí cu i c a dãyố ố ự ừ ế ị ố ủ
dest; các kí t sau d u k t thúc null s không đ c chép vàoự ấ ế ẽ ượ
•strncmp(a, b, n) - so sánh t kí t đ u cho đ n t i đa n kí t t hai dãy a và b (theoừ ự ầ ế ố ự ừ
th t t đi n); hàm tr v s âm n u ph n so sánh c a a nh h n b, 0 n u b ngứ ự ừ ể ả ề ố ế ầ ủ ỏ ơ ế ằ
nhau, và d ng n u l n h nươ ế ớ ơ
•strncpy(dest, source, n) - chép t đ u đ n t i đa n kí t t dãy source vào dãy destừ ầ ế ố ự ừ
•strrchr(source, c) - tìm v trí hi n l n cu i cùng c a kí t c trong dãy source và trị ệ ầ ố ủ ự ả
v m t con tr ch vào v trí đó hay con tr tr ng n u không tìm th y c trong đóề ộ ỏ ỉ ị ỏ ố ế ấ
Các hàm ít dùng t i h n là:ớ ơ
•strcoll(s1, s2) - so sánh hai dãy theo m t trình t đ a ph ng đ c thùộ ự ị ươ ặ
•strcspn(s1, s2) - tr v ch s c a kí t đ u tiên trong s1 trùng v i kí t b t kì nàoả ề ỉ ố ủ ự ầ ớ ự ấ
trong s2
•strerror(err) - tr v m t dãy kí t d i d ng m t thông báo l i ng v i mã (câuả ề ộ ự ướ ạ ộ ỗ ứ ớ
vi t) trong errế
•strpbrk(s1, s2) - tr v m t con tr ch vào kí t đ u tiên nào trong s1 mà trùng v iả ề ộ ỏ ỉ ự ầ ớ
kí t b t kì trong s2 hay m t con tr tr ng n u không tìm th yự ấ ộ ỏ ố ế ấ
•strspn(s1, s2) - tr v ch s c a kí t đ u tiên trong s1 mà nó không xu t hi nả ề ỉ ố ủ ự ầ ấ ệ
trong s2
•strstr(source, subst) - tr v m t con tr ch t i v trí c a dãy subst trong dãy sourceả ề ộ ỏ ỉ ớ ị ủ
hay tr v m t con tr r ng n u không t n t i m t dãy nh v y bên trong sourceả ề ộ ỏ ỗ ế ồ ạ ộ ư ậ
•strtok(s1, s2) - tr v m t con tr ch đ n m t token bên trong s1 mà đ c phânả ề ộ ỏ ỉ ế ộ ượ
chia ra b i các kí t trong s2ở ự
•strxfrm(s1, s2, n) - chuy n đ i s2 thành s1 dùng các quy t c đ a ph ng đ c thùể ổ ắ ị ươ ặ
C - Các hàm và th vi n c a nóư ệ ủ
TH VI N TIME.HƯ Ệ
Các đ i t ng ki u struct tm đ c s d ng đ l u tr ngày tháng và th i gian.ố ượ ể ượ ử ụ ể ư ữ ờ
struct tm
{
int tm_sec;
int tm_min;

int tm_hour;
int tm_mday;
int tm_mon;
int tm_year; //year since 1900
int tm_wday; //days since Sunday
int tm_yday; //days since 1 January: [0,365]
int tm_isdst; //daylight saving time flag
}
C tm_isdst là s d ng (+) n u daylight saving time có tác d ng, b ng 0 n u không có, làờ ố ươ ế ụ ằ ế
s âm (-) n u không có thông tin.ố ế
Mã quy cách Ý nghĩa
%a Tên ngày trong tu n vi t t tầ ế ắ
%A Tên ngày trong tu n đ y đầầủ
%b Tên tháng vi t t tế ắ
%B Tên tháng đ y đầ ủ
%c Date và time
%d Ngày trong tháng
%H Gi trong ngày, 24 giờ ờ
%h Gi trong ngày, 12 giờ ờ
%j Ngày trong năm
%m Tháng
%M Phút sau giờ
%p AM hay PM
%s Giây trong giờ
%U Tu n trong nămầ
%w Ngày trong tu n (0-6)ầ
%x Date
%X Time
%y Năm trong th kế ỷ
%Y Năm
%Z Múi giờ
%% Ký t %ự
Truy nh p vào đ ng hậ ồ ồ
clock_t clock (void);
Đây là s xung đ ng h c a máy. Mu n tính ra giây, ta đem chia v i CLOCK_PER_SEC.ố ồ ồ ủ ố ớ
N u t o xung đ ng h c a CPU không có, hàm tr l i giá tr 1.ế ạ ồ ồ ủ ả ạ ị
Truy nh p vào th i gianậ ờ
double difftime (time_t t0, time_t t1);
char *asctime (const struct tm *tp);
size_t strftime (char *s, size_t n, const char *cntrl_str, const struct tm*tp);
structtm *gmtime (const time_t *t_ptr);
struct tm *localtime (const time_t *t_ptr);
time_t mktime (struct tm *tp);
time_t time (time_t *timer); nh n th i gian h th ng quy ra giâyậ ờ ệ ố
void getdate (struct date *datep); nh n ngày h th ngậ ệ ố
void setdate (struct date *datep); thi t l p ngày h th ngế ậ ệ ố
void gettime (struct time *timep); nh n gi h th ngậ ờ ệ ố

void settime (struct time *timep); thi t l p gi h th ngế ậ ờ ệ ố
TH VI N STRING.HƯ Ệ
Các hàm qu n lý b nhả ộ ớ
int memcmp (const void *s1, const void *s2, size_t n); so sánh n byte trong 2 chu i s1, s2ỗ
(phân bi t ch hoa, ch th ng)ệ ữ ữ ườ
N u giá tr tr v >0 thì chu i s1 > chu i s2ế ị ả ề ỗ ỗ
N u giá tr tr v <0 thì chu i s2 < chu i s1ế ị ả ề ỗ ỗ
N u giá tr tr v =0 thì chu i s2 gi ng chu i s1ế ị ả ề ỗ ố ỗ
int memicmp (const void *s1, const void *s2, size_t n); so sánh n byte trong 2 chu i s1, s2ỗ
(không phân bi t ch hoa, ch th ng)ệ ữ ữ ườ
N u giá tr tr v >0 thì chu i s1 > chu i s2ế ị ả ề ỗ ỗ
N u giá tr tr v <0 thì chu i s2 < chu i s1ế ị ả ề ỗ ỗ
N u giá tr tr v =0 thì chu i s2 gi ng chu i s1ế ị ả ề ỗ ố ỗ
void *memchr (const void *s, int c, size_t n); tìm ký t c trong n byte đ u c a vùng s, n uự ầ ủ ế
tìm th y, hàm tr v đ a ch c a byte ch a ký t c đ u tiên trong s, trái l i, tr v NULLấ ả ề ị ỉ ủ ứ ự ầ ạ ả ề
void *memccpy (void *dest, const void *src, int c, size_t n); sao chép các ký t t vùng srcự ừ
sang vùng dest, vi c sao chép k t thúc khi g p ký t c ho c đã sao chép đ n ký tệ ế ặ ự ặ ủ ự
void *memcpy (void *dest, const void *src, size_t n); sao chép n ký t t vùng src sang vùngự ừ
dest, hàm cho l i đ a ch vùng destạ ị ỉ
void *memmove (void *dest, const void *src, size_t n);
void *memset (void *s, int c, size_t n); g i ký t c vào n byte đ u c a chu i s, hàm tr l iử ự ầ ủ ỗ ả ạ
đ a ch chu i sị ỉ ỗ
void movedata (unsigned srcseg, unsigned srcoff, unsigned destseg, unsigned destoff, size_t
n); sao chép n byte t phân đo n srcseg:srcoff đ n đ a ch destseg:destoffừ ạ ế ị ỉ
Các hàm qu n lý xâu ký tả ự
char *gets (char *s); nh p chu iậ ỗ
char *puts (char *s); xu t chu iấ ỗ
char *strcat (char *s1, const char *s2); ghép chu i s2 vào đuôi chu i s1ỗ ỗ
char *strchr (const char *s, int c); tìm ký t c trong chu i s (b t đ u t bên trái), không cóự ỗ ắ ầ ừ
tr v NULLả ề
char *strcpy (char *s1, const char *s2); sao chép n i dung trong s2 vào trong s1ộ
char *strdup (const char *s); g p đôi chu i sấ ỗ
char *strerror (int error_number);
char *strlwr (char *s); đ i chu i s thành ch th ngổ ỗ ữ ườ
char *strncat (char *s1, const char *s2, size_t n);
char *strncpy (char *s1, const char *s2, size_t n); sao chép t i đa n ký t đ u c a chu i s2ố ự ầ ủ ỗ
vào trong s1
char *strnset (char *s, int c, int n); gán n l n ký t c vào trong chu i sầ ự ỗ
char *strpbrk (const char *s1, const char *s2); tìm l n xu t hi n đ u tiên c a m t ký tầ ấ ệ ầ ủ ộ ự
thu c s2 trong s1, n u có, hàm cho đ a ch c a ký t tìm th y trong s1, trái l i, hàm choộ ế ị ỉ ủ ự ấ ạ
NULL
char *strrchr (const char *s, int c); tìm ký t c trong chu i s (b t đ u t bên ph i), không cóự ỗ ắ ầ ừ ả
tr v NULLả ề
char *strrev (char *s); đ o ng c các ký t trong chu i sả ượ ự ỗ
char *strset (char *s, int c); đ t ký t c vào m i v trí trong chu i s (thay các ký t trong sặ ự ọ ị ỗ ự
b ng c)ằ
char *strstr (const char *s1, const char *s2); tìm chu i s2 trong chu i s1, tr v v trí chu iỗ ỗ ả ề ị ỗ

s2 trong chu i s1ỗ
char *strtok (char *s1, const char *s2);
char *strupr (char *s); đ i chu i s thành ch hoaổ ỗ ữ
int strcmp (const char *s1, const char *s2); tr v k t qu so sánh 2 chu i s1 và s2, khôngả ề ế ả ỗ
phân bi t ch hoa, ch th ng c a cùng m t ký tệ ữ ữ ườ ủ ộ ự
N u giá tr tr v >0 thì chu i s1 ch a chu i s2ế ị ả ề ỗ ứ ỗ
N u giá tr tr v <0 thì chu i s2 ch a chu i s1ế ị ả ề ỗ ứ ỗ
N u giá tr tr v =0 thì chu i s2 gi ng chu i s1ế ị ả ề ỗ ố ỗ
int strcoll (const char *s1, const char *s2);
int stricmp (const char *s1, const char *s2); tr v k t qu so sánh 2 chu i s1 và s2, phânả ề ế ả ỗ
bi t ch hoa, ch th ng c a cùng m t ký tệ ữ ữ ườ ủ ộ ự
N u giá tr tr v >0 thì chu i s1 ch a chu i s2ế ị ả ề ỗ ứ ỗ
N u giá tr tr v <0 thì chu i s2 ch a chu i s1ế ị ả ề ỗ ứ ỗ
N u giá tr tr v =0 thì chu i s2 gi ng chu i s1ế ị ả ề ỗ ố ỗ
int strncmp (const char *s1, const char *s2, size_t n); so sánh n ký t đ u tiên c a chu i s1ự ầ ủ ỗ
và s2
int strnicmp (const char *s1, const char *s2, size_t n); so sánh n ký t đ u tiên c a chu i s1ự ầ ủ ỗ
và s2, không phân bi t ch hoa, ch th ng c a cùng m t ký tệ ữ ữ ườ ủ ộ ự
size_t strcspn (const char *s1, const char *s2); tìm đ dài đo n đ u c a chu iộ ạ ầ ủ ỗ
size_t strlen (const char *s); xác đ nh chi u dài chu i sị ề ỗ
size_t strspn (const char *s1, const *s2); tìm đ dài đo n đ u c a chu iộ ạ ầ ủ ỗ
size_t strxfrm (char *s1, const char *s2, size_t n);
unsigned *strlen (const char *s); xác đ nh chi u dài chu i sị ề ỗ
TH VI N STDLIB.HƯ Ệ
File tiêu đ này ch a các nguyên m u c a các hàm đ c s d ng vào các m c đích chung,ề ứ ẫ ủ ượ ử ụ ụ
ho c v i các macro và các đ nh nghĩa ki u có liên quan.ặ ớ ị ể
C p phát b nh đ ngấ ộ ớ ộ
unsigned coreleft (void); cho bi t b nh kh d ng trong vùng c p phát đ ng đ i v i môế ộ ớ ả ụ ấ ộ ố ớ
hình tiny, small và medium
unsigned long coreleft (void); cho bi t b nh kh d ng trong vùng c p phát đ ng đ i v iế ộ ớ ả ụ ấ ộ ố ớ
mô hình compact large và huge
void *calloc (size_t n, size_t size); c p phát vùng nh cho n đ i t ng kích c size byteấ ớ ố ượ ỡ
void *malloc (size_t size); c p phát vùng nh cho size byteấ ớ
void *realloc (void *block, size_t size); c p phát l i b nhấ ạ ộ ớ
void free (void *block); gi i phóng vùng nh đã c p phátả ớ ấ
Tìm ki m và s p x pế ắ ế
void *bsearch (const void *key_ptr; const void *a_ptr, size_t n_els, size_t el_size, int
compare (const void *, const void *));
void qsort (vois *a_ptr, size_t n_els, size_t el_size, int compare (const void *, const void *));
T o s nh u nhiênạ ố ẫ
int random (int n); t o các s ng u nhiên trong kho ng t 0 đ n (num-1)ạ ố ẫ ả ừ ế

int rand (void); t o s ng u nhiên trong kh ang t 0 đ n 32767ạ ố ẫ ỏ ừ ế
void randomize (void); kh i đ ng c ch t o s ng u nhiên b ng giá tr ng u nhiênở ộ ơ ế ạ ố ẫ ằ ị ẫ
void srand (unsigned seed); kh i t o b t o s ng u nhiên b ng giá tr seed, không có giáở ạ ộ ạ ố ẫ ằ ị
tr tr l iị ả ạ
Truy n thông v i môi tr ngề ớ ườ
char *getenv (const char *name);
int system (const char *s);
S h cố ọ
int abs (int x);
long labs (long x);
div_t div (int numer, int denom);
ldiv_t ldiv (long numer, long deniom);
Chuy n đ i xâu ký tể ổ ự
char *itoa (int x, char *s, int cs); chuy n s nguyên x trong h đ m c s cs sang chu i vàể ố ệ ế ơ ố ỗ
l u vào vùng nh s, hàm tr v đ a ch c a vùng sư ớ ả ề ị ỉ ủ
char *ltoa (long x, char *s, int cs); chuy n s ki u long x trong h đ m c s cs sang chu iể ố ể ệ ế ơ ố ỗ
và l u vào vùng nh s, hàm tr v đ a ch c a vùng sư ớ ả ề ị ỉ ủ
char *ultoa (unsigned long x, char *s, int cs); chuy n s ki u unsigned long x trong h đ mể ố ể ệ ế
c s cs sang chu i và l u vào vùng nh s, hàm tr v đ a ch c a vùng sơ ố ỗ ư ớ ả ề ị ỉ ủ
double atof (const char *s); chuy n đ i xâu các ch s str thành m t s floatể ổ ữ ố ộ ố
int atoi (const char*s); chuy n đ i xâu các ch s str thành m t s intể ổ ữ ố ộ ố
long atol (cont char *s); chuy n đ i xâu các ch s str thành m t s longể ổ ữ ố ộ ố
double strtod (const char *s, char **end_ptr);
long strtol (const char *s, char **end_ptr, int base);
unsigned long strtoul (const char *s, char **end_ptr, int base);
char *ecvt (double value, int ndig, int *dec, int *sign); chuy n giá tr ki u double sang chu iể ị ể ỗ
ch g m các ch sỉ ồ ữ ố
char *fcvt (double value, int ndig, int *dec, int *sign); chuy n giá tr ki u double sang chu iể ị ể ỗ
ch g m các ch sỉ ồ ữ ố
char *gcvt (double value, int ndec, char *buf); chuy n giá tr ki u double sang chu i có cể ị ể ỗ ả
d u ch m th p phân và d u (-) cho s âmấ ấ ậ ấ ố
Các hàm ký t nhi u byteự ề
int mblen (const char *s, size_t n);
int mbrowc (wchar_t *p, const char *s, size_t n);
int wctomb (char *s, wchar_t wc);
Các hàm xâu ký t nhi u byteự ề
size_t mbstowcs (wchar_t *wcs, const char *mbs, size_t n);
int wcstombs (char *mbs, const wchar_t *wcs, size_t n);
R i kh i ch ng trìnhờ ỏ ươ
void abort (void); k t thúc ch ng trình m t cách không bình th ngế ươ ộ ườ
int atexit (atexit_t func);
void exit (int status); k t thúc ch ng trình m t cách bình th ngế ươ ộ ườ
TH VI N CONIO.HƯ Ệ

