C là gì?
C là ngôn ngữ lập trình hướng thủ tục. Ngôn ngữ lập trình C được phát triển bởi Dennis Ritchie vào năm 1972. Nó chủ yếu được phát triển theo hướng ngôn ngữ lập trình hệ thống để viết một hệ điều hành.
Tính năng chính của C
Tính năng chính của ngôn ngữ lập trình C bao gồm:
- Quyền truy cập vào bộ nhớ cấp thấp
- Bộ keyword đơn giản
- Clean style
Những tính năng này khiến C phù hợp với các chương trình hệ thống như hệ điều hành hoặc phát triển trình biên dịch.
Nhiều ngôn ngữ sau này đã trực tiếp hoặc gián tiếp mượn cú pháp/tính năng của C như: Java, PHP, JavaScript. C++ gần như là một ngôn ngữ siêu thay thế cho C (Có rất ít chương trình có thể biên dịch bằng C, mà không biên dịch được trong C ++).
Do đó, dù C hiện nay không còn phổ biến so với trước, nhưng học C vẫn giúp bạn có được những kiến thức nền tảng khi tiếp cận với những ngôn ngữ đã vay mượn tính năng từ C.
Dưới đây là những bài học C cơ bản mà bọn mình đã tổng hợp được, mời các bạn tham khảo.
assert.h trong C
Header file có tên assert.h của Thư viện C cung cấp một macro gọi là assert có thể được sử dụng để kiểm tra một giả định được tạo bởi chương trình và in một thông báo chẩn đoán tìm lỗi nếu giả định này là false.
Macro được định nghĩa trước assert này tham chiếu tới macro khác là NDEBUG mà không là một phần của <assert.h>. Nếu NDEBUG được định nghĩa như là một tên macro trong source file, tại nơi mà <assert.h> được bao, thì assert được định nghĩa như sau:
#define assert(ignore) ((void)0)
Các macro được định nghĩa trong assert.h
Trong assert.h chỉ định nghĩa một macro sau:
void assert(int expression): Đây thực sự là một macro và không là một hàm. Macro này được sử dụng để thêm các chẩn đoán tìm lỗi trong chương trình C.
Macro assert() trong C
Hàm assert() trong C
Macro void assert(int bieu-thuc) trong Thư viện C chuẩn cho phép các thông tin chẩn đoán phát hiện được ghi tới tệp lỗi chuẩn (Standard Error File). Nói cách khác, nó có thể được sử dụng để thêm các thông báo chẩn đoán tìm lỗi trong lập trình C.
Khai báo hàm assert() trong C
Dưới đây là phần khai báo cho assert() Macro trong Thư viện C chuẩn.
void assert(int bieu-thuc);
Tham số
bieu-thuc: Đây có thể là một biến hoặc bất cứ biểu thức C nào. Nếu bieu-thuc ước lượng là TRUE, thì assert() không làm điều gì. Nếu bieu-thuc ước lượng là false, thì assert() hiển thị một thông báo lỗi trên stderr và ngừng thực thi chương trình.
Giá trị trả về
Macro này không trả về bất cứ giá trị nào.
Ví dụ
Chương trình C sau minh họa cách sử dụng của assert() macro trong Thư viện C:
#include <assert.h> #include <stdio.h> int main() { int a; char str[50]; printf("Nhap mot gia tri nguyen: \n"); scanf("%d", &a); assert(a >= 10); printf("Gia tri nguyen vua nhap la %d\n", a); printf("Nhap mot chuoi: "); scanf("%s", &str); assert(str != NULL); printf("Chuoi vua nhap la: %s\n", str); return(0); }
ctype.h trong C
Header file có tên ctype.h của Thư viện C khai báo một số hàm khá hữu ích cho việc kiểm tra và ánh xạ các ký tự.
Tất cả các hàm này nhận Hàm int như là một tham số, mà có giá trị phải là EOF hoặc có thể biểu diễn như là một unsigned char.
Tất cả hàm này trả về true (khác 0) nếu tham số c thỏa mãn điều kiện đã được mô tả, và false (0) nếu không thỏa mãn.
Ghi chú: Để tìm hiểu các lớp ký tự (ví dụ: lớp ký tự Punctuation, lớp ký tự graphical, lớp ký tự điều khiển...) là bao gồm các ký tự nào, mời bạn theo dõi ở phần cuối trang này.
Các hàm được định nghĩa trong ctype.h
Sau đây là một số hàm được định nghĩa trong ctype.h trong Thư viện C. Bạn theo link để tìm hiểu chi tiết các hàm này.
| Hàm | Mô tả |
|---|---|
| Hàm int isalnum(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là chữ-số không |
| Hàm int isalpha(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là chữ cái không |
| Hàm int iscntrl(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là ký tự điều khiển không |
| Hàm int isdigit(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là chữ số thập phân không |
| Hàm int isgraph(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là ký tự graphical với Locale đã cho không |
| Hàm int islower(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là một chữ thường không |
| Hàm int isprint(int c) | Hàm này kiểm tra xem ký tự đã truyền có thể in được không |
| Hàm int ispunct(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là một punctuation char không |
| Hàm int isspace(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là white-space |
| Hàm int isupper(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là một chữ hoa không |
| Hàm int isxdigit(int c) | Hàm này kiểm tra xem ký tự đã truyền có phải là ký tự thập lục phân không |
1. Hàm int isalnum(int c)
Hàm isalnum() trong C
Hàm void isalnum(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là ký tự - số hay không.
Khai báo hàm isalnum() trong C
Dưới đây là phần khai báo cho hàm isalnum() trong C.
int isalnum(int c);
Tham số
c − Đây là ký tự để được kiểm tra
Trả về giá trị
Hàm này trả về giá trị khác 0 nếu c là một số hoặc một chữ cái, nếu không thì nó trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isalnum() trong C.
#include <stdio.h>
#include <ctype.h>
int main()
{
int var1 = 'd';
int var2 = '2';
int var3 = '\t';
int var4 = ' ';
if( isalnum(var1) )
{
printf("var1 = |%c| la ky tu-so\n", var1 );
}
else
{
printf("var1 = |%c| khong phai la ky tu-so\n", var1 );
}
if( isalnum(var2) )
{
printf("var2 = |%c| la ky tu-so\n", var2 );
}
else
{
printf("var2 = |%c| khong phai la ky tu-so\n", var2 );
}
if( isalnum(var3) )
{
printf("var3 = |%c| la ky tu-so\n", var3 );
}
else
{
printf("var3 = |%c| khong phai la ky tu-so\n", var3 );
}
if( isalnum(var4) )
{
printf("var4 = |%c| la ky tu-so\n", var4 );
}
else
{
printf("var4 = |%c| khong phai la ky tu-so\n", var4 );
}
return(0);
}
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

2. Hàm isalpha() trong C
Hàm isalpha() trong C
Hàm void isalpha(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là chữ cái không.
Khai báo hàm isalpha() trong C
Dưới đây là phần khai báo cho hàm isalpha() trong C:
int isalpha(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 nếu c là một chữ cái, nếu không, hàm trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isalpha() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 'd'; int var2 = '2'; int var3 = '\t'; int var4 = ' '; if( isalpha(var1) ) { printf("var1 = |%c| la mot chu cai\n", var1 ); } else { printf("var1 = |%c| khong phai la mot chu cai\n", var1 ); } if( isalpha(var2) ) { printf("var2 = |%c| la mot chu cai\n", var2 ); } else { printf("var2 = |%c| khong phai la mot chu cai\n", var2 ); } if( isalpha(var3) ) { printf("var3 = |%c| la mot chu cai\n", var3 ); } else { printf("var3 = |%c| khong phai la mot chu cai\n", var3 ); } if( isalpha(var4) ) { printf("var4 = |%c| la mot chu cai\n", var4 ); } else { printf("var4 = |%c| khong phai la mot chu cai\n", var4 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

3. Hàm iscntrl() trong C
Hàm iscntrl() trong C
Hàm void iscntrl(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là ký tự điều khiển không
Theo bộ ký tự ASCII chuẩn, các ký tự điều khiển có mã hóa ASCII là 0x00 (NUL), 0x1f (US), và 0x7f (DEL). Một số trình triển khai riêng của một số nền tảng cụ thể có thể định nghĩa một số ký tự điều khiển bổ sung trong bộ ký tự mở rộng (trên 0x7f).
Khai báo hàm iscntrl() trong C
Dưới đây là phần khai báo cho hàm iscntrl() trong C:
int iscntrl(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 nếu c là một ký tự điều khiển. Nếu không, hàm trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm iscntrl() trong C:
#include <stdio.h> #include <ctype.h> int main () { int i = 0, j = 0; char str1[] = "Hoc \a lap trinh \t hay nhat"; char str2[] = "tai \n QTM"; /* in chuoi cho toi khi gap ky tu \a */ while( !iscntrl(str1[i]) ) { putchar(str1[i]); i++; } /* in chuoi cho toi khi gap ky tu \n */ while( !iscntrl(str2[j]) ) { putchar(str2[j]); j++; } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
4. Hàm isdigit() trong C
Hàm isdigit() trong C
Hàm void isdigit(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là chữ số thập phân không.
Các chữ số thập phân bao gồm − 0 1 2 3 4 5 6 7 8 9.
Khai báo hàm isdigit() trong C
Dưới đây là phần khai báo cho hàm isdigit() trong C:
int isdigit(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 nếu c là một chữ số. Nếu không, hàm trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isdigit() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 'h'; int var2 = '2'; if( isdigit(var1) ) { printf("var1 = |%c| la mot ky so\n", var1 ); } else { printf("var1 = |%c| khong phai la mot ky so\n", var1 ); } if( isdigit(var2) ) { printf("var2 = |%c| la mot ky so\n", var2 ); } else { printf("var2 = |%c| khong phai la mot ky so\n", var2 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

5. Hàm isgraph() trong C
Hàm isgraph() trong C
Hàm void isgraph(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là ký tự graphical với Locale đã cho không.
Ký tự graphical là một tập hợp gồm Ký tự chữ-số và ký tự punctuation
Khai báo hàm isgraph() trong C
Dưới đây là phần khai báo cho hàm isgraph() trong C:
int isgraph(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 nếu c là một ký tự graphical. Nếu không, hàm trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isgraph() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = '3'; int var2 = 'm'; int var3 = ' '; if( isgraph(var1) ) { printf("var1 = |%c| la co the in duoc\n", var1 ); } else { printf("var1 = |%c| la khong the in duoc\n", var1 ); } if( isgraph(var2) ) { printf("var2 = |%c| la co the in duoc\n", var2 ); } else { printf("var2 = |%c| la khong the in duoc\n", var2 ); } if( isgraph(var3) ) { printf("var3 = |%c| la co the in duoc\n", var3 ); } else { printf("var3 = |%c| la khong the in duoc\n", var3 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

6. Hàm islower() trong C
Hàm islower() trong C
Hàm int islower(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là một chữ thường không.
Khai báo hàm islower() trong C
Dưới đây là phần khai báo cho hàm islower() trong C:
int islower(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là chữ cái thường. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm islower() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 'Q'; int var2 = 'q'; int var3 = '3'; if( islower(var1) ) { printf("var1 = |%c| la mot ky tu chu thuong\n", var1 ); } else { printf("var1 = |%c| khong phai la mot ky tu chu thuong\n", var1 ); } if( islower(var2) ) { printf("var2 = |%c| la mot ky tu chu thuong\n", var2 ); } else { printf("var2 = |%c| khong phai la mot ky tu chu thuong\n", var2 ); } if( islower(var3) ) { printf("var3 = |%c| la mot ky tu chu thuong\n", var3 ); } else { printf("var3 = |%c| khong phai la mot ky tu chu thuong\n", var3 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

7. Hàm isprint() trong C
Hàm isprint() trong C
Hàm int isprint(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có thể in được không. Một ký tự có thể in được là ký tự không phải là ký tự điều khiển.
Khai báo hàm isprint() trong C
Dưới đây là phần khai báo cho hàm isprint() trong C:
int isprint(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là ký tự có thể in được. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isprint() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 'k'; int var2 = '8'; int var3 = '\t'; int var4 = ' '; if( isprint(var1) ) { printf("var1 = |%c| co the in duoc\n", var1 ); } else { printf("var1 = |%c| khong the in duoc\n", var1 ); } if( isprint(var2) ) { printf("var2 = |%c| co the in duoc\n", var2 ); } else { printf("var2 = |%c| khong the in duoc\n", var2 ); } if( isprint(var3) ) { printf("var3 = |%c| co the in duoc\n", var3 ); } else { printf("var3 = |%c| khong the in duoc\n", var3 ); } if( isprint(var4) ) { printf("var4 = |%c| co the in duoc\n", var4 ); } else { printf("var4 = |%c| khong the in duoc\n", var4 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

8. Hàm ispunct() trong C
Hàm ispunct() trong C
Hàm int ispunct(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là một punctuation char không. Ký tự punctuation là tập hợp gồm ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
Khai báo hàm ispunct() trong C
Dưới đây là phần khai báo cho hàm ispunct() trong C:
int ispunct(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là ký tự punctuation. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm ispunct() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 't'; int var2 = '1'; int var3 = '/'; int var4 = ' '; if( ispunct(var1) ) { printf("var1 = |%c| la mot ky tu punctuation\n", var1 ); } else { printf("var1 = |%c| khong phai la mot ky tu punctuation\n", var1 ); } if( ispunct(var2) ) { printf("var2 = |%c| la mot ky tu punctuation\n", var2 ); } else { printf("var2 = |%c| khong phai la mot ky tu punctuation\n", var2 ); } if( ispunct(var3) ) { printf("var3 = |%c| la mot ky tu punctuation\n", var3 ); } else { printf("var3 = |%c| khong phai la mot ky tu punctuation\n", var3 ); } if( ispunct(var4) ) { printf("var4 = |%c| la mot ky tu punctuation\n", var4 ); } else { printf("var4 = |%c| khong phai la mot ky tu punctuation\n", var4 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

9. Hàm isspace() trong C
Hàm isspace() trong C
Hàm int isspace(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là white-space.
Dưới đây là các ký tự whitespace trong Thư viện C:
' ' (0x20) khoảng trống (SPC) '\t' (0x09) tab ngang (TAB) '\n' (0x0a) newline (dòng mới) - dòng mới (LF) '\v' (0x0b) tab doc (VT) '\f' (0x0c) feed (FF) '\r' (0x0d) carriage return (CR)
Khai báo hàm isspace() trong C
Dưới đây là phần khai báo cho hàm isspace() trong C:
int isspace(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là ký tự whitespace. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isspace() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 't'; int var2 = '1'; int var3 = ' '; if( isspace(var1) ) { printf("var1 = |%c| la mot khoang trang\n", var1 ); } else { printf("var1 = |%c| khong phai la mot khoang trang\n", var1 ); } if( isspace(var2) ) { printf("var2 = |%c| la mot khoang trang\n", var2 ); } else { printf("var2 = |%c| khong phai la mot khoang trang\n", var2 ); } if( isspace(var3) ) { printf("var3 = |%c| la mot khoang trang\n", var3 ); } else { printf("var3 = |%c| khong phai la mot khoang trang\n", var3 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

10. Hàm isupper() trong C
Hàm isupper() trong C
Hàm int isupper(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là một chữ hoa không.
Khai báo hàm isupper() trong C
Dưới đây là phần khai báo cho hàm isupper() trong C:
int isupper(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là chữ hoa. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isupper() trong C:
#include <stdio.h> #include <ctype.h> int main() { int var1 = 'M'; int var2 = 'm'; int var3 = '3'; if( isupper(var1) ) { printf("var1 = |%c| la mot ky tu chu hoa\n", var1 ); } else { printf("var1 = |%c| khong phai la mot ky tu chu hoa\n", var1 ); } if( isupper(var2) ) { printf("var2 = |%c| la mot ky tu chu hoa\n", var2 ); } else { printf("var2 = |%c| khong phai la mot ky tu chu hoa\n", var2 ); } if( isupper(var3) ) { printf("var3 = |%c| la mot ky tu chu hoa\n", var3 ); } else { printf("var3 = |%c| khong phai la mot ky tu chu hoa\n", var3 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

11. Hàm isxdigit() trong C
Hàm isxdigit() trong C
Hàm int isxdigit(int c) trong Thư viện C kiểm tra xem ký tự đã truyền có phải là ký tự thập lục phân (ký tự hexa) không.
Khai báo hàm isxdigit() trong C
Dưới đây là phần khai báo cho hàm isxdigit() trong C:
int isxdigit(int c);
Tham số
c − Đây là ký tự để được kiểm tra.
Trả về giá trị
Hàm này trả về giá trị khác 0 (true) nếu c là ký tự thập lục phân. Nếu không hàm trả về 0 (false).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm isxdigit() trong C:
#include <stdio.h> #include <ctype.h> int main() { char var1[] = "tuts"; char var2[] = "0xE"; if( isxdigit(var1[0]) ) { printf("var1 = |%s| la mot ky tu hexa\n", var1 ); } else { printf("var1 = |%s| khong phai la mot ky tu hexa\n", var1 ); } if( isxdigit(var2[0] )) { printf("var2 = |%s| la mot ky tu hexa\n", var2 ); } else { printf("var2 = |%s| khong phai la mot ky tu hexa\n", var2 ); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Thư viện ctye.h cũng chứa hai hàm chuyển đổi mà nhận và trả về một int:
Hàm int tolower(int c) - Hàm này chuyển đổi các chữ cái hoa thành chữ thường
Hàm int toupper(int c) - Hàm này chuyển đổi các chữ cái thường thành chữ hoa
12. Hàm tolower() trong C
Hàm tolower() trong C
Hàm int tolower(int c) trong Thư viện C chuyển đổi ký tự đã cho thành chữ thường.
Khai báo hàm tolower() trong C
Dưới đây là phần khai báo cho hàm tolower() trong C:
int tolower(int c);
Tham số
c − Đây là ký tự để được chuyển đổi thành chữ thường.
Trả về giá trị
Hàm này trả về chữ cái thường tương đương với c nếu giá trị đó tồn tại, nếu không c sẽ không thay đổi. Giá trị được trả về dưới dạng một giá trị int mà có thể được ép kiểu ngầm định thành char.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm tolower() trong C:
#include <stdio.h> #include <ctype.h> int main() { int i = 0; char c; char str[] = "TUTORIALS POINT"; while( str[i] ) { putchar(tolower(str[i])); i++; } return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả:
13. Hàm toupper() trong C
Hàm toupper() trong C
Hàm int toupper(int c) trong Thư viện C chuyển đổi các chữ cái thường thành chữ hoa.
Khai báo hàm toupper() trong C
Dưới đây là phần khai báo cho hàm toupper() trong C:
int toupper(int c);
Tham số
c − Đây là ký tự để được chuyển đổi thành chữ hoa.
Trả về giá trị
Hàm này trả về chữ cái hoa tương đương với c nếu giá trị đó tồn tại, nếu không c sẽ không thay đổi. Giá trị được trả về dưới dạng một giá trị int mà có thể được ép kiểu ngầm định thành char.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm toupper() trong C:
#include <stdio.h> #include <ctype.h> int main() { int i = 0; char c; char str[] = "Tutorials Point"; while(str[i]) { putchar (toupper(str[i])); i++; } return(0); }
Biên dịch và chạy chương trình C để xem kết quả:
Giải thích một số lớp ký tự
| Lớp ký tự | Mô tả |
|---|---|
| Chữ số | Đây là tập hợp tất cả các số { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } |
| Chữ số thập lục phân | Đây là tập hợp gồm { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f } |
| Chữ cái thường | Là tập hợp gồm tất cả chữ cái thường { a b c d e f g h i j k l m n o p q r s t u v w x y z } |
| Chữ cái hoa | Là tập hợp gồm tất cả chữ cái hoa {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z } |
| Chữ cái | Là tập hợp gồm tất cả chữ cái hoa và thường |
| Ký tự chữ-số | Là một tập hợp gồm chữ số, Ký tự chữ hoa và thường |
| Ký tự Punctuation | Là tập hợp gồm ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ |
| Ký tự Graphical | Là một tập hợp gồm Ký tự chữ-số và ký tự punctuation |
| Ký tự whitespace | Là tập hợp gồm tab, newline (dòng mới), vertical tab, form feed, carriage return, và space |
| Ký tự có thể in được | Là tập hợp gồm Ký tự chữ-số, Ký tự punctuation và Ký tự whitespace |
| Ký tự điều khiển | Trong ASCII, các ký tự này có các mã hóa trong hệ bát phân từ 000 tới 037, và 177 (DEL) |
| Ký tự Blank | Các ký tự này gồm các ký tự space và tab |
| Ký tự chữ cái | Là tập hợp gồm các ký tự chữ hoa và chữ thường |
errno.h trong C
Header file có tên errno.h trong Thư viện C chuẩn định nghĩa biến nguyên errno, được thiết lập bởi system call (lời gọi hệ thống) và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra. Macro này là một sự mở rộng của kiểu int dạng lvalue có thể sửa đổi, vì thế nó có thể được đọc và được sửa đổi bởi một chương trình.
errno được thiết lập về 0 tại phần khởi động chương trình. Các hàm cụ thể của thư viện C chuẩn sửa đổi giá trị của nó về một số lớn hơn 0 để báo hiệu một số kiểu lỗi. Bạn cũng có thể sửa đổi giá trị của nó hoặc phục hồi nó về 0 tùy theo yêu cầu của bạn.
Header file có tên errno.h cũng định nghĩa một danh sách các macro để chỉ các mã lỗi khác nhau.
Các macro được định nghĩa trong errno.h
Bảng dưới liệt kê một số Macro được định nghĩa trong errno.h trong Thư viện C:
| Macro | Mô tả |
|---|---|
| extern int errno | Đây là macro được thiết lập bởi system call và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra |
| EDOM Domain Error | Macro này biểu diễn một domain error, mà xảy ra nếu một tham số đầu vào là ở bên ngoài miền mà hàm toán học đó được định nghĩa và errno được thiết lập là EDOM |
| ERANGE Range Error | Macro này biểu diễn một range error, xảy ra nếu một tham số đầu vào là bên ngoài dãy giá trị mà hàm được định nghĩa, và errno được thiết lập là ERANGE |
1. Macro errno trong C
Macro errno trong C
Macro extern int errno trong Thư viện C được thiết lập bởi system call và một số hàm thư viện về lỗi để chỉ rằng có lỗi đang xảy ra.
Khai báo Macro errno trong C
Dưới đây là phần khai báo cho errno macro trong C.
extern int errno
Tham số
macro này không nhận bất kỳ tham số nào
Trả về giá trị
macro này không trả về bất kỳ giá trị nào
Ví dụ
Chương trình C sau minh họa cách sử dụng của errno Macro trong C.
#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE *fp; fp = fopen("fileexample.txt", "r"); if( fp == NULL ) { fprintf(stderr, "Gia tri cua errno: %d\n", errno); fprintf(stderr, "Xay la loi khi mo file: %s\n", strerror(errno)); } else { fclose(fp); } return(0); }
Biên dịch và chạy chương trình C trên trong trường hợp file.txt không tồn tại:

2. Macro EDOM trong C
Macro EDOM trong C
Macro EDOM trong Thư viện C biểu diễn một domain error, mà xảy ra nếu một tham số đầu vào là ở bên ngoài miền mà hàm toán học đó được định nghĩa và errno được thiết lập là EDOM.
Khai báo Macro EDOM trong C
Dưới đây là phần khai báo cho EDOM Macro trong C.
#define EDOM some_value
Tham số
macro này không nhận bất kỳ tham số nào
Trả về giá trị
macro này không trả về bất kỳ giá trị nào
Ví dụ
Chương trình C sau minh họa cách sử dụng của EDOM Macro.
#include <stdio.h> #include <errno.h> #include <math.h> int main() { double val; errno = 0; val = sqrt(-10); if(errno == EDOM) { printf("Gia tri khong hop le \n"); } else { printf("Gia tri hop le\n"); } errno = 0; val = sqrt(10); if(errno == EDOM) { printf("Gia tri khong hop le\n"); } else { printf("Gia tri hop le\n"); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

3. Macro ERANGE trong C
Macro ERANGE trong C
Macro ERANGE trong Thư viện C biểu diễn một range error, xảy ra nếu một tham số đầu vào là bên ngoài dãy giá trị mà hàm được định nghĩa, và errno được thiết lập là ERANGE.
Khai báo Macro ERANGE trong C
Dưới đây là phần khai báo cho ERANGE Macro trong C.
#define ERANGE some_value
Tham số
macro này không nhận bất kỳ tham số nào
Trả về giá trị
macro này không trả về bất kỳ giá trị nào
Ví dụ
Chương trình C sau minh họa cách sử dụng của ERANGE Macro.
#include <stdio.h> #include <errno.h> #include <math.h> int main() { double x; double value; x = 2.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x); } else { printf("Log(%f) = %f\n", x, value); } x = 1.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x); } else { printf("Log(%f) = %f\n", x, value); } x = 0.000000; value = log(x); if( errno == ERANGE ) { printf("Log(%f) la ben ngoai day gia tri cua ham log\n", x); } else { printf("Log(%f) = %f\n", x, value); } return 0; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

float.h trong C
Header file có tên float.h của Thư viện C chứa một tập hợp các hằng số đa dạng (phụ thuộc vào nền tảng) liên quan tới các giá trị số thực dấu chấm động. Các hằng này được đề xuất bởi ANSI C. Trước khi tìm hiểu các hằng này, bạn cần biết số thực dấu chấm động gồm 4 thành phần:
| Thành phần | Mô tả |
|---|---|
| S | Dấu ( +/- ) |
| b | Biểu diễn cơ số (base): hệ nhị phân là 2, thập phân là 10, thập lục phân là 16, … |
| e | Số mũ (exponent), một số nguyên giữa emin và emax |
| p | Số ký tự thập phân có nghĩa (Precision) |
Dựa vào 4 thành phần trên, một số thực dấu chấm động sẽ có giá trị của nó được biểu diễn như sau:
số thực dấu chấm động = ( S ) p x be hoặc số thực dấu chấm động = (+/-) precision x baseexponent
Các macro được định nghĩa trong float.h
Các giá trị sau là trình triển khai riêng và được định nghĩa với chỉ thị #define, nhưng các giá trị này không thể là chữ thường. Ghi chú rằng, tất cả FLT tham chiếu tới kiểu float, DBL tham chiếu tới double và LDBL tham chiếu tới long double.
| Macro | Mô tả |
| FLT_ROUNDS | Định nghĩa chế độ làm tròn cho phép cộng số thực dấu chấm động và nó có thể có bất kỳ giá trị nào sau đây: -1 − Không xác định 0 − Làm tròn về 0 1 − Làm tròn về giá trị gần nhất 2 − Hướng về dương vô cực 3 − Hướng về âm vô cực |
| FLT_RADIX 2 | Định nghĩa biểu diễn cơ số của số mũ. Base-2 là hệ nhị phân, base-10 là hệ thập phân... |
FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG | Các macro này định nghĩa số chữ số để biểu diễn số thực (trong FLT_RADIX base) |
FLT_DIG 6 DBL_DIG 10 LDBL_DIG 10 | Các macro này xác định số chữ số thập phân tối đa (base-10) có thể được biểu diễn mà không thay đổi sau khi làm tròn |
FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP | Các macro này xác định giá trị nguyên âm nhỏ nhất cho số mũ (exponent) trong cơ số FLT_RADIX |
FLT_MIN_10_EXP -37 DBL_MIN_10_EXP -37 LDBL_MIN_10_EXP -37 | Các macro này xác định giá trị nguyên âm nhỏ nhất cho một số mũ (exponent) trong cơ số 10 |
FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP | Các macro này xác định giá trị nguyên lớn nhất cho một số mũ (exponent) trong cơ số FLT_RADIX |
FLT_MAX_10_EXP +37 DBL_MAX_10_EXP +37 LDBL_MAX_10_EXP +37 | Các macro này xác định giá trị nguyên lớn nhất cho một số mũ (exponent) trong cơ số 10 |
FLT_MAX 1E+37 DBL_MAX 1E+37 LDBL_MAX 1E+37 | Các macro này xác định giá trị số thực dấu chấm động lớn nhất |
FLT_EPSILON 1E-5 DBL_EPSILON 1E-9 LDBL_EPSILON 1E-9 | Các macro này xác định chữ số có nghĩa tối thiểu mà có thể biểu diễn được |
FLT_MIN 1E-37 DBL_MIN 1E-37 LDBL_MIN 1E-37 | Các macro này định nghĩa các giá trị số thực dấu chấm động nhỏ nhất |
Ví dụ
Chương trình C sau minh họa cách sử dụng của một số hằng được định nghĩa trong float.h.
#include <stdio.h> #include <float.h> int main() { printf("Gia tri max cua mot so thuc = %.10e\n", FLT_MAX); printf("Gia tri min cua mot so thuc = %.10e\n", FLT_MIN); printf("So ky so de bieu dien mot so = %.10e\n", FLT_MANT_DIG); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

limits.h trong C
Header file có tên limits.h trong Thư viện C xác định các thuộc tính đa dạng của các kiểu biến khác nhau. Các macro, được định nghĩa trong header này, giới hạn giá trị của các kiểu biến đa dạng như char, int, và long.
Các giới hạn này xác định rằng một biến không thể chứa bất cứ giá trị nào vượt quá các giới hạn đó, ví dụ: một unsigned char có thể giữ một giá trị tối đa là 255.
Các macro được định nghĩa trong limits.h
Các giá trị sau là trình triển khai riêng và được định nghĩa với chỉ thị #define, nhưng các giá trị này không thể là chữ thường.
| Macro | Giá trị | Mô tả |
|---|---|---|
| CHAR_BIT | 8 | Định nghĩa số bit trong một byte |
| SCHAR_MIN | -128 | Định nghĩa giá trị nhỏ nhất cho một signed char |
| SCHAR_MAX | 127 | Định nghĩa giá trị lớn nhất cho một signed char |
| UCHAR_MAX | 255 | Định nghĩa giá trị lớn nhất cho một unsigned char |
| CHAR_MIN | 0 | Định nghĩa giá trị nhỏ nhất cho một kiểu char và giá trị của nó là bằng với SCHAR_MIN nếu char biểu diễn các giá trị âm, nếu không là 0 |
| CHAR_MAX | 127 | Định nghĩa giá trị nhỏ nhất cho một kiểu char và giá trị của nó là bằng với SCHAR_MAX nếu char biểu diễn các giá trị âm, nếu không là UCHAR_MAX |
| MB_LEN_MAX | 1 | Định nghĩa số byte tối đa trong một multi-byte char (ký tự được biểu diễn bởi nhiều byte) |
| SHRT_MIN | -32768 | Định nghĩa giá trị nhỏ nhất cho một short int |
| SHRT_MAX | +32767 | Định nghĩa giá trị lớn nhất cho một short int |
| USHRT_MAX | 65535 | Định nghĩa giá trị lớn nhất cho một unsigned short int |
| INT_MIN | -32768 | Định nghĩa giá trị nhỏ nhất cho một int |
| INT_MAX | +32767 | Định nghĩa giá trị lớn nhất cho một int |
| UINT_MAX | 65535 | Định nghĩa giá trị lớn nhất cho một unsigned int |
| LONG_MIN | -2147483648 | Định nghĩa giá trị nhỏ nhất cho một long int |
| LONG_MAX | +2147483647 | Định nghĩa giá trị lớn nhất cho một long int |
| ULONG_MAX | 4294967295 | Định nghĩa giá trị lớn nhất cho một unsigned long int |
Ví dụ
Chương trình C sau minh họa cách sử dụng của một số hằng được định nghĩa trong limits.h.
#include <stdio.h> #include <limits.h> int main() { printf("So bit de bieu dien mot byte la %d\n", CHAR_BIT); printf("Gia tri nho nhat cua SIGNED CHAR = %d\n", SCHAR_MIN); printf("Gia tri lon nhat cua SIGNED CHAR = %d\n", SCHAR_MAX); printf("Gia tri lon nhat cua UNSIGNED CHAR = %d\n", UCHAR_MAX); printf("Gia tri nho nhat cua SHORT INT = %d\n", SHRT_MIN); printf("Gia tri lon nhat cua SHORT INT = %d\n", SHRT_MAX); printf("Gia tri nho nhat cua INT = %d\n", INT_MIN); printf("Gia tri lon nhat cua INT = %d\n", INT_MAX); printf("Gia tri nho nhat cua CHAR = %d\n", CHAR_MIN); printf("Gia tri lon nhat cua CHAR = %d\n", CHAR_MAX); printf("Gia tri nho nhat cua LONG = %ld\n", LONG_MIN); printf("Gia tri lon nhat cua LONG = %ld\n", LONG_MAX); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

locale.h trong C
Header file có tên locale.h trong Thư viện C định nghĩa các thiết lập riêng về vị trí, chẳng hạn như định dạng date và các biểu tượng về currency. Bạn sẽ thấy một số macro được định nghĩa cùng với một cấu trúc quan trọng struct lconv và hai hàm quan trọng được liệt kê dưới đây.
Các macro được định nghĩa trong locale.h
Bảng dưới liệt kê một số Macro được định nghĩa trong locale.h và các macro này sẽ được sử dụng trong hai hàm được trình bày ở dưới đây:
| Macro | Mô tả |
|---|---|
| LC_ALL | Thiết lập mọi thứ |
| LC_COLLATE | Tác động đến các hàm strcoll và strxfrm |
| LC_CTYPE | Tác động đến tất cả các hàm về ký tự |
| LC_MONETARY | Tác động đến thông tin về tiền tệ được cung cấp bởi hàm localeconv |
| LC_NUMERIC | Tác động đến định dạng dấu thập phân và thông tin được cung cấp bởi hàm localeconv |
| LC_TIME | Tác động đến hàm strftime |
Các hàm được định nghĩa trong locale.h
Sau đây là một số hàm được định nghĩa trong locale.h của Thư viện C:
| Hàm | Mô tả |
|---|---|
| Hàm char *setlocale(int category, const char *locale) | Thiết lập hoặc đọc vị trí phụ thuộc vào thông tin đã cho |
| Hàm struct lconv *localeconv(void) | Thiết lập hoặc đọc vị trí phụ thuộc vào thông tin đã cho |
Hàm setlocale() trong C
Hàm char *setlocale(int category, const char *locale) trong Thư viện C thiết lập và đọc vị trí tùy vào thông tin đã cho.
Khai báo hàm setlocale() trong C
Dưới đây là phần khai báo cho hàm setlocale() trong C:
char *setlocale(int category, const char *locale)
Tham số
category − Đây là một hằng (đã được đặt tên) xác định loại hàm bị tác động bởi thiết lập locale này.
LC_ALL cho tất cả các hàm.
LC_COLLATE cho các hàm so sánh chuỗi, ví dụ như strcoll().
LC_CTYPE cho các hàm phân loại và chuyển đổi ký tự, ví dụ như strtoupper().
LC_MONETARY cho định dạng tiền tệ như localeconv().
LC_NUMERIC cho phân tách thập phân cho localeconv().
LC_TIME cho các hàm định dạng date và time như strftime().
LC_MESSAGES cho các phản hồi hệ thống.
locale − Nếu locale là NULL hoặc chuỗi trống "", thì các tên locale sẽ được thiết lập từ các giá trị của các biến môi trường với cùng tên như các loại trên.
Trả về giá trị
Nếu thành công thì setlocale() trả về một chuỗi tương ứng với thiết lập locale. Hàm này trả về NULL nếu yêu cầu không được thực hiện.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm setlocale() trong C:
#include <locale.h> #include <stdio.h> #include <time.h> int main () { time_t currtime; struct tm *timer; char buffer[80]; time( &currtime ); timer = localtime( &currtime ); printf("Locale la: %s\n", setlocale(LC_ALL, "en_GB")); strftime(buffer,80,"%c", timer ); printf("Date la: %s\n", buffer); printf("Locale la: %s\n", setlocale(LC_ALL, "de_DE")); strftime(buffer,80,"%c", timer ); printf("Date la: %s\n", buffer); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Locale la: en_GB Date la: Fri 05 ju 2016 10:35:02 UTC Locale la: de_DE Date la: Fr 05 Dez 2016 10:35:02 UTC
Hàm localeconv() trong C
Hàm struct lconv *localeconv(void) trong Thư viện C thiết lập và đọc vị trí tùy vào thông tin đã cho. Chúng được trả về trong một đối tượng của kiểu cấu trúc lconv.
Khai báo hàm localeconv() trong C
Dưới đây là phần khai báo cho hàm localeconv() trong C:
struct lconv *localeconv(void)
Tham số
Hàm này không nhận bất kỳ tham số nào.
Trả về giá trị
Hàm này trả về một con trỏ tới một cấu trúc struct lconv cho Locale hiện tại, mà có cấu trúc sau:
typedef struct { char *decimal_point; char *thousands_sep; char *grouping; char *int_curr_symbol; char *currency_symbol; char *mon_decimal_point; char *mon_thousands_sep; char *mon_grouping; char *positive_sign; char *negative_sign; char int_frac_digits; char frac_digits; char p_cs_precedes; char p_sep_by_space; char n_cs_precedes; char n_sep_by_space; char p_sign_posn; char n_sign_posn; } lconv
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm localeconv() trong C:
#include <locale.h> #include <stdio.h> int main () { struct lconv * lc; setlocale(LC_MONETARY, "it_IT"); lc = localeconv(); printf("Ky hieu cua Local Currency: %s\n",lc->currency_symbol); printf("Ky hieu cua International Currency: %s\n",lc->int_curr_symbol); setlocale(LC_MONETARY, "en_US"); lc = localeconv(); printf("Ky hieu cua Local Currency: %s\n",lc->currency_symbol); printf("Ky hieu cua International Currency: %s\n",lc->int_curr_symbol); setlocale(LC_MONETARY, "en_GB"); lc = localeconv(); printf ("Ky hieu cua Local Currency: %s\n",lc->currency_symbol); printf ("Ky hieu cua International Currency: %s\n",lc->int_curr_symbol); printf("Ky tu Decimal Point: %s\n", lc->decimal_point); return 0; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Ky hieu cua Local Currency: EUR Ky hieu cua International Currency: EUR Ky hieu cua Local Currency: $ Ky hieu cua International Currency: USD Ky hieu cua Local Currency: £ Ky hieu cua International Currency: GBP Ky tu Decimal Point = .
Cấu trúc lconv
typedef struct { char *decimal_point; char *thousands_sep; char *grouping; char *int_curr_symbol; char *currency_symbol; char *mon_decimal_point; char *mon_thousands_sep; char *mon_grouping; char *positive_sign; char *negative_sign; char int_frac_digits; char frac_digits; char p_cs_precedes; char p_sep_by_space; char n_cs_precedes; char n_sep_by_space; char p_sign_posn; char n_sign_posn; } lconv
Sau đây là miêu tả chi tiết các trường trên:
| Trường | Mô tả |
|---|---|
| decimal_point | Ký tự dấu chấm thập phân được sử dụng cho các giá trị không phải tiền tệ |
| thousands_sep | Ký tự phân tách vị trí hàng nghìn được sử dụng cho các giá trị không phải tiền tệ |
| grouping | Một chuỗi chỉ kích cỡ của mỗi nhóm chữ số trong các định lượng không phải tiền tệ. Mỗi ký tự biểu diễn một giá trị nguyên, mà chỉ định số chữ số trong nhóm hiện tại. Một giá trị 0 nghĩa là giá trị trước đó được sử dụng cho phần còn lại của nhóm |
| int_curr_symbol | Đây là một chuỗi các biểu tượng tiền tệ quốc tế. Ba ký tự đầu tiên của nó được xác định bởi ISO 4217:1987 và ký tự thứ tư là phân tách biểu tượng tiền tệ với phần định lượng tiền tệ |
| currency_symbol | Biểu tượng local được sử dụng cho tiền tệ |
| mon_decimal_point | Ký tự dấu thập phân được sử dụng cho các giá trị tiền tệ |
| mon_thousands_sep | Ký tự nhóm hàng nghìn được sử dụng cho các giá trị tiền tệ |
| mon_grouping | Một chuỗi có các phần tử định nghĩa kích cỡ của nhóm chữ số trong giá trị tiền tệ. Mỗi ký tự biểu diễn một giá trị nguyên mà chỉ định số chữ số trong nhóm hiện tại. Một giá trị 0 nghĩa là giá trị trước đó được sử dụng cho phần còn lại của nhóm |
| positive_sign | Ký tự được sử dụng cho các giá trị tiền tệ dương |
| negative_sign | Ký tự được sử dụng cho các giá trị tiền tệ âm |
| int_frac_digits | Số chữ số sau dấu thập phân trong các giá trị tiền tệ quốc tế |
| frac_digits | Số chữ số sau dấu thập phân trong các giá trị tiền tệ |
| p_cs_precedes | Nếu bằng 1, thì currency_symbol xuất hiện trước một giá trị tiền tệ dương. Nếu bằng 0, thì currency_symbol xuất hiện sau một giá trị tiền tệ |
| p_sep_by_space | Nếu bằng 1, thì phân tách currency_symbol với một giá trị tiền tệ dương bởi một khoảng trống. Nếu bằng 0, thì sẽ không phân tách currency_symbol và một giá trị tiền tệ dương |
| n_cs_precedes | Nếu bằng 1, thì currency_symbol ở trước một giá trị tiền tệ âm. Nếu bằng 0, thì currency_symbol theo sau một giá trị tiền tệ âm |
| n_sep_by_space | Nếu bằng 1, thì phân tách currency_symbol với một giá trị tiền tệ âm bởi một khoảng trống. Nếu bằng 0, thì không phân tách |
| p_sign_posn | Biểu diễn vị trí của positive_sign trong một giá trị tiền tệ dương |
| n_sign_posn | Biểu diễn vị trí của negative_sign trong một giá trị tiền tệ âm |
Các giá trị sau được sử dụng cho p_sign_posn và n_sign_posn trong Thư viện C:
| Giá trị | Mô tả |
|---|---|
| 0 | Các dấu ngoặc đơn bao giá trị và currency_symbol |
| 1 | Ký hiệu đặt trước giá trị và currency_symbol |
| 2 | Ký hiệu theo sau giá trị và currency_symbol |
| 3 | Ký hiệu đặt ngay trước giá trị và currency_symbol |
| 4 | Ký hiệu đặt ngay sau giá trị và currency_symbol |
math.h trong C
Header file có tên math.h trong Thư viện C định nghĩa các hàm toán học đa dạng và một macro. Tất cả các hàm có sẵn trong thư viện này nhận double như là một tham số và trả về kết quả ở kiểu double.
Các macro được định nghĩa trong math.h
Chỉ có một Macro được định nghĩa trong thư viện này:
HUGE_VAL: Macro này được sử dụng khi kết quả của một hàm không thể biểu diễn dưới dạng một số thực dấu chấm động. Nếu độ lớn để biểu diễn chính xác kết quả là quá lớn, thì hàm thiết lập errno thành ERANGE để chỉ một Range Error, và trả về một giá trị đủ lớn, cụ thể được đặt tên bởi HUGE_VAL hoặc đối của nó là – HUGE_VAL.
Nếu độ lớn của kết quả là quá nhỏ, thì một giá trị 0 được trả về. Trong trường hợp này, errno có thể hoặc không thể được thiết lập thành ERANGE.
Các hàm được định nghĩa trong math.h
Sau đây là một số hàm được định nghĩa trong math.h trong Thư viện C:
| Hàm | Mô tả |
|---|---|
| double acos(double x) | Trả về arcos của x (giá trị radian) |
| double asin(double x) | Trả về arcsin của x (giá trị radian) |
| double atan(double x) | Trả về arctan của x (giá trị radian) |
| double atan2(doubly y, double x) | Trả về arctan của y/x (giá trị radian) |
| double cos(double x) | Trả về cos của góc x (giá trị radian) |
| double cosh(double x) | Trả về cosh (hàm hyperbolic cosin) của x (giá trị radian) |
| double sin(double x) | Trả về sin của góc x (giá trị radian) |
| double sinh(double x) | Trả về sinh (hàm hyperbolic sin) của x (giá trị radian) |
| double tanh(double x) | Trả về tanh (hàm hyperbolic tan) của x (giá trị radian) |
| double exp(double x) | Trả về ex |
| double frexp(double x, int *exponent) | Giá trị được trả về là mantissa (phần định trị) và số nguyên được trỏ tới bởi exponent (số mũ). Giá trị kết quả là x = mantissa * 2 ^ exponent |
| double ldexp(double x, int exponent) | Trả về x*2exponent |
| double log(double x) | Trả về lnx |
| double log10(double x) | Trả về log10(x) |
| double modf(double x, double *integer) | Trả về phần thập phân của x |
| double pow(double x, double y) | Trả về xy |
| double sqrt(double x) | Trả về căn bậc hai của x |
| double ceil(double x) | Trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x |
| double fabs(double x) | Trả về trị tuyệt đối của x |
| double floor(double x) | Trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x |
| double fmod(double x, double y) | Trả về phần dư của phép chia x/y |
1. Hàm acos() trong C
Hàm double acos(double x) trong Thư viện C trả về arcos của x (giá trị radian).
Khai báo hàm acos() trong C
Dưới đây là phần khai báo cho hàm acos() trong C:
double acos(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động trong đoạn [-1,+1].
Trả về giá trị:
Hàm này trả về arcos của x, trong đoạn [0, pi] radian.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm acos() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, ret, val; x = 0.9; val = 180.0 / PI; ret = acos(x) * val; printf("Gia tri arccos cua %lf la bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
2. Hàm asin() trong C
Hàm double asin(double x) trong Thư viện C trả về arcsin của x (giá trị radian).
Khai báo hàm asin() trong C
Dưới đây là phần khai báo cho hàm asin() trong C:
double asin(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động trong đoạn [-1,+1].
Trả về giá trị:
Hàm này trả về arcsin của x, trong đoạn [-pi/2,+pi/2] radian.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm asin() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, ret, val; x = 0.9; val = 180.0 / PI; ret = asin(x) * val; printf("Gia tri arcsin cua %lf la bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
3. Hàm atan() trong C
Hàm double atan(double x) trong Thư viện C trả về arctan của x (giá trị radian).
Khai báo hàm atan() trong C
Dưới đây là phần khai báo cho hàm atan() trong C:
double atan(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về arctan của x, trong đoạn [-pi/2,+pi/2] radian.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm atan() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, ret, val; x = 1.0; val = 180.0 / PI; ret = atan (x) * val; printf("Gia tri arctan cua %lf la bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
4. Hàm atan2() trong C
Hàm double atan2(doubly y, double x) trong Thư viện C trả về arctan của y/x (giá trị radian).
Khai báo hàm atan2() trong C
Dưới đây là phần khai báo cho hàm atan2() trong C:
double atan2(doubly y, double x)
Tham số:
- x − Đây là giá trị số thực dấu chấm động biểu diễn tọa độ x.
- y − Đây là giá trị số thực dấu chấm động biểu diễn tọa độ y.
Trả về giá trị:
Hàm này trả về arctan của y/x, trong đoạn [-pi,+pi] radian.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm atan2() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, y, ret, val; x = -7.0; y = 7.0; val = 180.0 / PI; ret = atan2 (y,x) * val; printf("Gia tri arctan2 cua x = %lf, y = %lf ", x, y); printf("la bang %lf\n", ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
5. Hàm cos() trong C
Hàm double cos(double x) trong Thư viện C trả về cos của góc x (đo bằng radian).
Khai báo hàm cos() trong C
Dưới đây là phần khai báo cho hàm cos() trong C:
double cos(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động biểu diễn một góc được diễn đạt bằng giá trị radian.
Trả về giá trị:
Hàm này trả về cos của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm cos() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, ret, val; x = 60.0; val = PI / 180.0; ret = cos( x*val ); printf("Gia tri cosin cua %lf la bang %lf\n", x, ret); x = 90.0; val = PI / 180.0; ret = cos( x*val ); printf("Gia tri cosin cua %lf la bang %lf\n", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

6. Hàm cosh() trong C
Hàm double cosh(double x) trong Thư viện C trả về hypebolic cosine của x.
Khai báo hàm cosh() trong C
Dưới đây là phần khai báo cho hàm cosh() trong C:
double cosh(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về hyperbolic cosine của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm cosh() trong C:
#include <stdio.h> #include <math.h> int main () { double x; x = 0.5; printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x)); x = 1.0; printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x)); x = 1.5; printf("Gia tri hyperbolic cosine cua %lf la bang %lf\n", x, cosh(x)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

7. Hàm sin() trong C
Hàm double sin(double x) trong Thư viện C trả về sin của góc x (giá trị radian).
Khai báo hàm sin() trong C
Dưới đây là phần khai báo cho hàm sin() trong C:
double sin(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động biểu diễn một góc được diễn đạt bằng giá trị radian.
Trả về giá trị:
Hàm này trả về sin của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm sin() trong C:
#include <stdio.h> #include <math.h> #define PI 3.14159265 int main () { double x, ret, val; x = 45.0; val = PI / 180; ret = sin(x*val); printf("Sin cua %lf bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
8. Hàm sinh() trong C
Hàm double sinh(double x) trong Thư viện C trả về hyperbolic sine của x.
Khai báo hàm sinh() trong C
Dưới đây là phần khai báo cho hàm sinh() trong C:
double sinh(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về hyperbolic sine của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm sinh() trong C:
#include <stdio.h> #include <math.h> int main () { double x, ret; x = 0.5; ret = sinh(x); printf("Hyperbolic sine cua %lf bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
9. Hàm tanh() trong C
Hàm double tanh(double x) trong Thư viện C trả về hyperbolic tang của x.
Khai báo hàm tanh() trong C
Dưới đây là phần khai báo cho hàm tanh() trong C:
double tanh(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về hyperbolic tang của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm tanh() trong C:
#include <stdio.h> #include <math.h> int main () { double x, ret; x = 0.5; ret = tanh(x); printf("Hyperbolic tangent cua %lf bang %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
10. Hàm exp() trong C
Hàm double exp(double x) trong Thư viện C trả về e mũ x.
Khai báo hàm exp() trong C
Dưới đây là phần khai báo cho hàm exp() trong C:
double exp(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về ex.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm exp() trong C:
#include <stdio.h> #include <math.h> int main () { double x = 0; printf("e^%lf = %lf\n", x, exp(x)); printf("e^%lf = %lf\n", x+1, exp(x+1)); printf("e^%lf = %lf\n", x+2, exp(x+2)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

11. Hàm frexp() trong C
Hàm double frexp(double x, int *exponent) trong Thư viện C trả về mantissa (phần định trị) và số nguyên được trỏ tới bởi exponent (số mũ). Giá trị kết quả là x = mantissa * 2 ^ exponent.
Khai báo hàm frexp() trong C
Dưới đây là phần khai báo cho hàm frexp() trong C:
double frexp(double x, int *exponent)
Tham số:
x − Đây là giá trị số thực dấu chấm động để được tính toán.
exponent − Đây là con trỏ tới một đối tượng int nơi mà giá trị exponent được lưu trữ.
Trả về giá trị:
Hàm này trả về phần định trị (mantissa) và số nguyên được trỏ tới bởi exponent.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm frexp() trong C:
#include <stdio.h> #include <math.h> int main () { double x = 1024, fraction; int e; fraction = frexp(x, &e); printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
12. Hàm ldexp() trong C
Hàm double ldexp(double x, int exponent) trong Thư viện C trả về x*2exponent.
Khai báo hàm ldexp() trong C
Dưới đây là phần khai báo cho hàm ldexp() trong C:
double ldexp(double x, int exponent)
Tham số:
x − Đây là giá trị số thực dấu chấm động, cũng biểu diễn số chữ số sau dấu phảy có nghĩa.
exponent − Đây là giá trị của exponent.
Trả về giá trị:
Hàm này trả về x * 2 exp
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm ldexp() trong C:
#include <stdio.h> #include <math.h> int main () { double x, ret; int n; x = 0.65; n = 3; ret = ldexp(x ,n); printf("%f * 2^%d = %f\n", x, n, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
13. Hàm log() trong C
Hàm double log(double x) trong Thư viện C trả về lnx.
Khai báo hàm log() trong C
Dưới đây là phần khai báo cho hàm log() trong C:
double log(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về lnx.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm log() trong C:
#include <stdio.h> #include <math.h> int main () { double x, ret; x = 2.7; /* tim gia tri cua log(2.7) */ ret = log(x); printf("log(%lf) = %lf", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
14. Hàm log10() trong C
Hàm double log10(double x) trong Thư viện C trả về log10(x).
Khai báo hàm log10() trong C
Dưới đây là phần khai báo cho hàm log10() trong C:
double log10(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về log10(x), với x lớn hơn 0.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm log10() trong C:
#include <stdio.h> #include <math.h> int main () { double x, ret; x = 1000; /* tim gia tri cua log101000 */ ret = log10(x); printf("log10(%lf) = %lf\n", x, ret); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
15. Hàm modf() trong C
Hàm double modf(double x, double *integer) trong Thư viện C trả về phần thập phân của x.
Khai báo hàm modf() trong C
Dưới đây là phần khai báo cho hàm modf() trong C:
double modf(double x, double *integer)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
integer − Đây là con trỏ tới một đối tượng mà phần nguyên được lưu trữ.
Trả về giá trị:
Hàm này trả về phần thập phân của x, có cùng dấu.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm modf() trong C:
#include<stdio.h> #include<math.h> int main () { double x, fractpart, intpart; x = 7.123456; fractpart = modf(x, &intpart); printf("Phan nguyen = %lf\n", intpart); printf("Phan thap phan = %lf \n", fractpart); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

16. Hàm pow() trong C
Hàm double pow(double x, double y) trong Thư viện C trả về xy.
Khai báo hàm pow() trong C
Dưới đây là phần khai báo cho hàm pow() trong C:
double pow(double x, double y)
Tham số:
- x − Đây là cơ số, là một giá trị số thực dấu chấm động.
- y − Đây là số mũ, là một giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về xy.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm pow() trong C:
#include <stdio.h> #include <math.h> int main () { printf("9.0 ^ 3 = %lf\n", pow(9.0, 3)); printf("4.05 ^ 2.98 = %lf", pow(4.05, 2.98)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
17. Hàm sqrt() trong C
Hàm double sqrt(double x) trong Thư viện C trả về căn bậc hai của x.
Khai báo hàm sqrt() trong C
Dưới đây là phần khai báo cho hàm sqrt() trong C:
double sqrt(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về căn bậc hai của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm sqrt() trong C:
#include <stdio.h> #include <math.h> int main () { printf("Can bac hai cua %lf bang %lf\n", 4.0, sqrt(4.0) ); printf("Can bac hai cua %lf bang %lf\n", 5.0, sqrt(5.0) ); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

18. Hàm ceil() trong C
Hàm double ceil(double x) trong Thư viện C trả về giá trị nguyên nhỏ nhất lớn hơn hoặc bằng x.
Khai báo hàm ceil() trong C
Dưới đây là phần khai báo cho hàm ceil() trong C:
double ceil(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Trả về giá trị nguyên nhỏ nhất không nhỏ hơn x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm ceil() trong C:
#include <stdio.h> #include <math.h> int main () { float val1, val2, val3, val4; val1 = 1.6; val2 = 1.2; val3 = 2.8; val4 = 2.3; printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val1, ceil(val1)); printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val2, ceil(val2)); printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val3, ceil(val3)); printf ("Gia tri cua ceil(%.1f) = %.1lf\n", val4, ceil(val4)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

19. Hàm fabs() trong C
Hàm double fabs(double x) trong Thư viện C trả về giá trị tuyệt đối của x.
Khai báo hàm fabs() trong C
Dưới đây là phần khai báo cho hàm fabs() trong C:
double fabs(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về giá trị tuyệt đối của x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm fabs() trong C:
#include <stdio.h> #include <math.h> int main () { int a, b; a = 345; b = -345; printf("Tri tuyet doi: |%d| = %lf\n", a, fabs(a)); printf("Tri tuyet doi: |%d| = %lf\n", b, fabs(b)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

20. Hàm floor() trong C
Hàm double floor(double x) trong Thư viện C trả về giá trị nguyên lớn nhất nhỏ hơn hoặc bằng x.
Khai báo hàm floor() trong C
Dưới đây là phần khai báo cho hàm floor() trong C:
double floor(double x)
Tham số:
x − Đây là giá trị số thực dấu chấm động.
Trả về giá trị:
Hàm này trả về số nguyên lớn nhất không lớn hơn x.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm floor() trong C:
#include <stdio.h> #include <math.h> int main () { float val1, val2, val3, val4; val1 = 1.6; val2 = 1.2; val3 = 2.8; val4 = 2.3; printf("Gia tri cua floor(%.1f) = %.1lf\n", val1, floor(val1)); printf("Gia tri cua floor(%.1f) = %.1lf\n", val2, floor(val2)); printf("Gia tri cua floor(%.1f) = %.1lf\n", val3, floor(val3)); printf("Gia tri cua floor(%.1f) = %.1lf\n", val4, floor(val4)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

21. Hàm fmod() trong C
Hàm double fmod(double x, double y) trong Thư viện C trả về phần dư của phép chia x/y.
Khai báo hàm fmod() trong C
Dưới đây là phần khai báo cho hàm fmod() trong C:
double fmod(double x, double y)
Tham số:
x − Đây là giá trị số thực dấu chấm động đóng vai trò là tử số.
y − Đây là giá trị số thực dấu chấm động đóng vai trò là mẫu số.
Trả về giá trị:
Hàm này trả về phần dư của phép chia x/y.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm fmod() trong C:
#include <stdio.h> #include <math.h> int main () { float a, b; int c; a = 9.2; b = 3.7; c = 2; printf("Phan du cua phep chia %f / %d la %lf\n", a, c, fmod(a,c)); printf("Phan du cua phep chia %f / %f la %lf\n", a, b, fmod(a,b)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

setjmp.h trong C
Header file có tên setjmp.h trong Thư viện C định nghĩa macro setjmp(), một hàm longjmp(), và một kiểu biến jmp_buf, để bỏ qua lời gọi hàm thông thường và trả về qui tắc, bằng cách cung cấp các phương thức để thực hiện các cú nhảy mà vẫn duy trì môi trường gọi hàm.
Biến được định nghĩa trong setjmp.h
Dưới đây là kiểu biến được định nghĩa trong setjmp.h:
jmp_buf: Đây là một kiểu mảng được sử dụng để giữ thông tin cho macro setjmp() và hàm longjmp().
Các macro được định nghĩa trong setjmp.h
Chỉ có một macro được định nghĩa trong thư viện này:
int setjmp(jmp_buf environment): Macro này lưu trữ môi trường (environment) hiện tại bên trong biến environment để sử dụng sau bởi hàm longjmp(). Nếu macro này trả về một cách trực tiếp từ lời gọi macro, thì nó trả về 0; nhưng nếu nó trả về từ một lời gọi hàm longjmp(), thì một giá trị khác 0 được trả về.
Khai báo Macro setjmp() trong C
Dưới đây là phần khai báo cho setjmp() macro.
int setjmp(jmp_buf environment)
Tham số:
environment − Đây là đối tượng của kiểu jmp_buf nơi mà thông tin về môi trường được lưu trữ.
Trả về giá trị:
Macro này trả về nhiều hơn 1 lần. Đầu tiên, trên lời gọi trực tiếp của nó, nó luôn luôn trả về 0. Khi longjmp được gọi với thông tin được thiết lập tới environment, macro này lại trả về lần nữa; lúc này nó trả về giá trị đã được truyền tới longjmp như là tham số thứ hai.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của setjmp() macro.
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
main()
{
jmp_buf env;
int i;
i = setjmp(env);
printf("i = %d\n", i);
if (i != 0) exit(0);
longjmp(env, 2);
printf("Dong nay co duoc in khong?\n");
}
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
i = 0
i = 2
Các hàm được định nghĩa trong setjmp.h
Chỉ có một hàm được định nghĩa trong setjmp.h:
Hàm void longjmp(jmp_buf environment, int value): Hàm này phục hồi môi trường (environment) đã được lưu trữ bởi lời gọi gần nhất tới macro setjmp() trong cùng lời gọi hàm của chương trình với tham số tương ứng là jmp_buf.
Khai báo hàm longjmp() trong C
Dưới đây là phần khai báo cho hàm longjmp() trong C:
void longjmp(jmp_buf environment, int value)
Tham số:
environment − Đây là đối tượng của kiểu jmp_buf chứa thông tin để lưu trữ môi trường tại điểm gọi của setjmp.
value − Đây là giá trị để biểu thức setjmp ước lượng.
Trả về giá trị:
Hàm này không trả về bất cứ giá trị nào.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của hàm longjmp() trong C:
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
main()
{
jmp_buf env;
int i;
i = setjmp(env);
printf("i = %d\n", i);
if (i != 0) exit(0);
longjmp(env, 2);
printf("Dong nay co duoc in khong?\n");
}
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
i = 0
i = 2
signal.h trong C
Header file có tên signal.h trong Thư viện C định nghĩa một kiểu biến sig_atomic_t, hai lời gọi hàm, và một số macro để xử lý các tín hiệu khác nhau được báo cáo trong khi thực thi một chương trình.
Các biến được định nghĩa trong signal.h
Sau đây là kiểu biến được định nghĩa trong signal.h:
sig_atomic_t: Đây là kiểu int và được sử dụng như là một biến trong bộ xử lý tín hiệu (signal handler). Đây là một kiểu nguyên của một đối tượng mà có thể được truy cập như là một thực thể nguyên tử (atomic entity), ngay cả khi có mặt các tín hiệu không đồng bộ.
Các macro được định nghĩa trong signal.h
Sau đây là các macro được định nghĩa trong signal.h và các macro này sẽ được sử dụng trong hai hàm được liệt kê dưới đây. Macro SIG_ được sử dụng với hàm tín hiệu để định nghĩa các hàm tín hiệu.
| STT | Macro & Miêu tả |
|---|---|
| 1 | SIG_DFL Đây là Signal Handler mặc định |
| 2 | SIG_ERR Biểu diễn một Signal Error |
| 3 | SIG_IGN Bỏ qua tín hiệu |
Macro SIG được sử dụng để biểu diễn một tín hiệu số trong các điều kiện sau:
| STT | Macro & Miêu tả |
|---|---|
| 1 | SIGABRT Kết thúc chương trình một cách bất thường |
| 2 | SIGFPE Lỗi số thực dấu chấm động như chia cho số 0 |
| 3 | SIGILL Hoạt động không hợp lệ |
| 4 | SIGINT Tín hiệu ngắt, chẳng hạn như Ctrl-C |
| 5 | SIGSEGV Truy cập không hợp lệ tới kho lưu trữ |
| 6 | SIGTERM Yêu cầu kết thúc |
Các hàm được định nghĩa trong signal.h
Sau đây là một số hàm được định nghĩa trong signal.h trong Thư viện C:
| STT | Hàm & Miêu tả |
|---|---|
| 1 | Hàm void (*signal(int sig, void (*func)(int)))(int) Hàm này thiết lập một hàm để xử lý tín hiệu (ví dụ: một signal handler) |
| 2 | Hàm này tạo tín hiệu sig. Tham số sig là tương thích với macro SIG |
Header file có tên stddef.h trong Thư viện C chuẩn định nghĩa các kiểu biến và macro đa dạng. Nhiều định nghĩa này cũng có mặt trong các header khác.
Các biến được định nghĩa trong stddef.h
Dưới đây liệt kê một số kiểu biến được định nghĩa trong stddef.h trong Thư viện C:
| Biến | Mô tả |
|---|---|
| ptrdiff_t | Đây là kiểu nguyên có dấu và là kết quả của phép trừ hai con trỏ |
| size_t | Đây là kiểu nguyên không dấu và là kết quả của từ khóa sizeof |
| wchar_t | Đây là một kiểu nguyên, là kích cỡ của một hằng ký tự rộng (wide char) |
Các macro được định nghĩa trong stddef.h
Bảng dưới liệt kê một số Macro được định nghĩa trong stddef.h trong Thư viện C:
| Macro | Mô tả |
|---|---|
| NULL | Macro này là giá trị của một hằng con trỏ null |
| offsetof(type, member-designator) | Các kết quả này trong một hằng số nguyên của kiểu size_t mà là offset (đơn vị byte) của một thành viên cấu trúc từ phần đầu của cấu trúc đó. Thành viên được cung cấp bởi tham số member-designator, và tên của cấu trúc được cung cấp bởi type |
1. Macro NULL() trong C
Macro NULL trong Thư viện C là giá trị của một hằng con trỏ null. Nó có thể được định nghĩa như là ((void*)0), 0 hoặc 0L tùy thuộc vào Compiler.
Khai báo Macro NULL() trong C
Sau đây có thể là khai báo cho NULL Macro tùy thuộc vào compiler.
#define NULL ((char *)0) hoặc #define NULL 0L hoặc #define NULL 0
Tham số
Macro này không nhận bất kỳ tham số nào
Trả về giá trị
Macro này không trả về bất kỳ giá trị nào
Ví dụ
Chương trình C sau minh họa cách sử dụng của NULL Macro.
#include <stddef.h> #include <stdio.h> int main () { FILE *fp; fp = fopen("nofile.txt", "r"); if( fp == NULL ) { printf("Khong the mo nofile.txt !!!\n"); } return(0); }
Giả sử chúng ta muốn mở một nofile.txt không tồn tại thì khi biên dịch và chạy chương trình C trên sẽ cho kết quả:

2. Macro offsetof() trong C
Macro offsetof(type, member-designator) trong Thư viện C chuẩn cho kết quả một hằng số nguyên của kiểu size_t mà là offset (đơn vị byte) của một thành viên cấu trúc từ phần đầu của cấu trúc đó. Thành viên được cung cấp bởi member-designator, và tên của cấu trúc được cung cấp bởi type.
Khai báo Macro offsetof() trong C
Dưới đây là phần khai báo cho offsetof() Macro.
offsetof(type, member-designator)
Tham số
type − Đây là kiểu lớp trong đó member-designator là một mệnh danh hợp lệ.
member-designator − Đây là mệnh danh thành viên của kiểu lớp.
Trả về giá trị
Macro này trả về giá trị của kiểu size_t mà là giá trị offset của thành viên trong kiểu type.
Ví dụ
Chương trình C sau minh họa cách sử dụng của offsetof() Macro.
#include <stddef.h> #include <stdio.h> struct student { char name[50]; char school[50]; int rollno; }; int main() { printf("name offset = %d byte trong student struct.\n", offsetof(struct student, name)); printf("class offset = %d byte trong student struct.\n", offsetof(struct student, school)); printf("rollno offset = %d byte trong student struct.\n", offsetof(struct student, rollno)); return(0); }
stdarg.h trong C
Header file có tên stdarg.h trong Thư viện C định nghĩa một kiểu biến va_list và 3 macro mà có thể được sử dụng để lấy các tham số trong một hàm khi số tham số là chưa được biết (ví dụ như số tham số là có thể biến đổi).
Các biến được định nghĩa trong stdarg.h
Sau đây là kiểu biến được định nghĩa trong stdarg.h:
va_list: Đây là một kiểu phù hợp để lưu trữ thông tin cần thiết bởi ba macro là va_start(), va_arg() và va_end().
Các macro được định nghĩa trong stdarg.h
Bảng dưới liệt kê một số Macro được định nghĩa trong stdarg.h trong Thư viện C:
| Macro | Mô tả |
|---|---|
| void va_start(va_list ap, last_arg) | Macro này khởi tạo biến ap để được sử dụng với hai macro là va_arg và va_end. Tham số last_arg, là tham số cố định được biết cuối cùng, đang được truyền tới hàm, ví dụ: tham số ở trước ellipsis |
| type va_arg(va_list ap, type) | Macro này thu nhận tham số tiếp theo trong danh sách tham số của hàm với kiểu type |
| void va_end(va_list ap) | Macro này cho phép một hàm có số tham số biến đổi mà sử dụng macro là va_start để trả về. Nếu va_end không được gọi trước khi trả về từ hàm đó, thì kết quả là không được định nghĩa |
1. Macro va_start() trong C
Macro void va_start(va_list ap, last_arg) trong Thư viện C khởi tạo biến ap để được sử dụng với hai macro là va_arg và va_end. Tham số last_arg, là tham số cố định được biết cuối cùng, đang được truyền tới hàm, ví dụ: tham số ở trước ellipsis.
Macro này phải được gọi trước khi sử dụng va_arg và va_end.
Khai báo Macro va_start() trong C
Dưới đây là phần khai báo cho va_start() macro.
void va_start(va_list ap, last_arg);
Tham số
ap − Đây là đối tượng của va_list và nó giữ thông tin cần thiết để thu được các tham số bổ sung với va_arg.
last_arg − Đây là tham số cố định được biết cuối cùng đang được truyền tới hàm.
Trả về giá trị
Macro này không trả về bất kỳ giá trị nào.
Ví dụ
Chương trình C sau minh họa cách sử dụng của va_start() macro.
#include<stdarg.h> #include<stdio.h> int sum(int, ...); int main(void) { printf("Tong cua 15, 25 va 35 = %d\n", sum(3, 15, 25, 35) ); printf("Tong cua 5, 10, 15 va 20 = %d\n", sum(4, 5, 10, 15, 25) ); return 0; } int sum(int num_args, ...) { int val = 0; va_list ap; int i; va_start(ap, num_args); for(i = 0; i < num_args; i++) { val += va_arg(ap, int); } va_end(ap); return val; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

2. Macro va_arg() trong C
Macro type va_arg(va_list ap, type) trong Thư viện C thu nhận tham số tiếp theo trong danh sách tham số của hàm với kiểu type. Macro này không quyết định xem có hay không tham số được thu nhận là tham số được truyền tới hàm.
Khai báo Macro va_arg() trong C
Dưới đây là phần khai báo cho va_arg() macro.
type va_arg(va_list ap, type)
Tham số
ap − Đây là đối tượng của kiểu va_list với thông tin về các tham số bổ sung và trạng thái thu nhận. Đối tượng này nên được khởi tạo bởi một lời gọi ban đầu tới va_start trước khi lời gọi đầu tiên tới va_arg.
type − Đây là tên kiểu. Tên kiểu này được sử dụng như là kiểu của biểu thức, mà macro này mở rộng tới.
Trả về giá trị
Macro này trả về tham số bổ sung như là một biểu thức của kiểu type.
Ví dụ
Chương trình C sau minh họa cách sử dụng của va_arg() macro.
#include <stdarg.h> #include <stdio.h> int sum(int, ...); int main() { printf("Tong cua 25 va 52 = %d\n", sum(2, 25, 52) ); return 0; } int sum(int num_args, ...) { int val = 0; va_list ap; int i; va_start(ap, num_args); for(i = 0; i < num_args; i++) { val += va_arg(ap, int); } va_end(ap); return val; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
3. Macro va_end() trong C
Macro void va_end(va_list ap) trong Thư viện C cho phép một hàm có số tham số biến đổi mà sử dụng macro là va_start để trả về. Nếu va_end không được gọi trước khi trả về từ hàm đó, thì kết quả là không được định nghĩa.
Khai báo Macro va_end() trong C
Dưới đây là phần khai báo cho va_end() macro.
void va_end(va_list ap)
Tham số
ap − Đây là đối tượng va_list được khởi tạo trước đó bởi va_start trong cùng hàm.
Trả về giá trị
Macro này không trả về bất cứ giá trị nào.
Ví dụ
Chương trình C sau minh họa cách sử dụng của va_end() macro.
#include <stdarg.h> #include <stdio.h> int mul(int, ...); int main() { printf("11 * 15 = %d\n", mul(2, 11, 15) ); return 0; } int mul(int num_args, ...) { int val = 1; va_list ap; int i; va_start(ap, num_args); for(i = 0; i < num_args; i++) { val *= va_arg(ap, int); } va_end(ap); return val; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
![]()
stdio.h trong C
Header file có tên stdio.h trong Thư viện C chuẩn định nghĩa 3 kiểu biến, một số macro và các hàm đa dạng để thực hiện input và output.
Các biến được định nghĩa trong stdio.h
Dưới đây liệt kê một số kiểu biến được định nghĩa trong stdio.h trong Thư viện C:
| Biến | Mô tả |
|---|---|
| size_t | Đây là kiểu nguyên không dấu và là kết quả của từ khóa sizeof |
| FILE | Đây là một kiểu đối tượng phù hợp để lưu trữ thông tin cho một File Stream |
| fpos_t | Đây là một kiểu đối tượng phù hợp để lưu trữ bất cứ vị trí nào trong một File |
Các macro được định nghĩa trong stdio.h
Bảng dưới liệt kê một số Macro được định nghĩa trong stdio.h trong Thư viện C:
| Macro | Mô tả |
|---|---|
| NULL | Macro này là giá trị của một hằng con trỏ null |
| _IOFBF, _IOLBF và _IONBF | Đây là các macro mà phát triển các biểu thức hằng số nguyên với các giá trị riêng biệt và phù hợp để sử dụng như là tham số thứ ba cho hàm setvbuf |
| BUFSIZ | Macro này là một số nguyên, mà biểu diễn kích cỡ của Buffer được sử dụng bởi hàm setbuf |
| EOF | Macro này là một số nguyên âm, chỉ rằng đã đến End-Of-File |
| FOPEN_MAX | Macro này là một số nguyên, biểu diễn số file tối đa mà hệ thống có thể bảo đảm để được mở một cách đồng thời |
| FILENAME_MAX | Macro này là một số nguyên, biểu diễn length dài nhất của một mảng ký tự phù hợp để lưu trữ filename dài nhất có thể. Nếu trình triển khai là không giới hạn, thì giá trị này nên là giá trị tối đa được đề nghị |
| L_tmpnam | Macro này là một số nguyên, biểu diễn length dài nhất của một mảng ký tự phù hợp để lưu trữ filename tạm thời dài nhất có thể mà được tạo bởi hàm tmpnam |
| SEEK_CUR, SEEK_END, và SEEK_SET | Macro này được sử dụng trong hàm fseek để xác định các vị trí khác nhau trong một File |
| TMP_MAX | Macro này là số tối đa các filename duy nhất mà hàm tmpnam có thể tạo |
| stderr, stdin, và stdout | Các macro này là các con trỏ tới các kiểu FILE tương ứng với Standard Error, Standard Input và Standard Output Stream |
Các hàm được định nghĩa trong stdio.h
Sau đây là một số hàm được định nghĩa trong stdio.h trong Thư viện C:
| STT | Hàm & Miêu tả |
|---|---|
| 1 | Đóng Stream. Tất cả Buffer (bộ đệm) bị Flush (xóa sạch hoặc chuyển hết ra ngoại vi) |
| 2 | Hàm void clearerr(FILE *stream) Xóa end-of-file và error indicator cho Stream đã cho |
| 3 | Kiểm tra end-of-file indicator cho Stream đã cho |
| 4 | Kiểm tra error indicator cho Stream đã cho |
| 5 | Flush bộ đệm đầu ra của một Stream |
| 6 | Hàm int fgetpos(FILE *stream, fpos_t *pos) Lấy vị trí file hiện tại của Stream và ghi nó tới pos |
| 7 | Hàm FILE *fopen(const char *filename, const char *mode) Mở tên file được trỏ tham số filename bởi sử dụng chế độ mode đã cho |
| 8 | Hàm size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) Đọc dữ liệu từ Stream đã cho trong mảng được trỏ bởi ptr |
| 9 | Hàm FILE *freopen(const char *filename, const char *mode, FILE *stream) Gắn kết một filename mới với Stream đã cho và cùng lúc đó đóng FILE cũ trong Stream |
| 10 | Hàm int fseek(FILE *stream, long int offset, int whence) Thiết lập vị trí file của Stream tới offset đã cho. Tham số offset xác định số byte để tìm kiếm từ vị trí where đã cho |
| 11 | Hàm int fsetpos(FILE *stream, const fpos_t *pos) Thiết lập vị trí file của stream đã cho tới vị trí đã cho. Tham số pos là một vị trí được cung cấp bởi hàm fgetpos |
| 12 | Hàm long int ftell(FILE *stream) Trả về vị trí file hiện tại của Stream đã cho |
| 13 | Hàm size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) Ghi dữ liệu từ mảng được trỏ bởi ptr tới Stream đã cho |
| 14 | Hàm int remove(const char *filename) Xóa filename đã cho để nó không thể truy cập được nữa |
| 15 | Hàm int rename(const char *old_filename, const char *new_filename) Làm cho filename được tham chiếu tới, được thay đổi từ old_filename thành new_filename |
| 16 | Thiết lập vị trí file tới phần đầu của file trong Stream đã cho |
| 17 | Hàm void setbuf(FILE *stream, char *buffer) Định nghĩa cách một Stream nên được đệm (buffer) |
| 18 | Hàm int setvbuf(FILE *stream, char *buffer, int mode, size_t size) Một hàm khác để xác định cách một Stream nên được đệm (buffer) |
| 19 | Tạo file tạm thời trong chế độ wb+ |
| 20 | Tạo và trả về một filename tạm thời hợp lệ (chưa tồn tại trước khi tạo) |
| 21 | Hàm int fprintf(FILE *stream, const char *format, ...) Gửi output đã được định dạng tới một Stream |
| 22 | Hàm int printf(const char *format, ...) Gửi output đã được định dạng tới một stdout |
| 23 | Hàm int sprintf(char *str, const char *format, ...) Gửi output đã được định dạng tới một chuỗi string |
| 24 | Hàm int vfprintf(FILE *stream, const char *format, va_list arg) Gửi output đã được định dạng tới một stream bởi sử dụng một danh sách tham số |
| 25 | Hàm int vprintf(const char *format, va_list arg) Gửi output đã được định dạng tới một stdout bởi sử dụng một danh sách tham số |
| 26 | Hàm int vsprintf(char *str, const char *format, va_list arg) Gửi output đã được định dạng tới một chuỗi string bởi sử dụng một danh sách tham số |
| 27 | Hàm int fscanf(FILE *stream, const char *format, ...) Đọc input đã được định dạng từ một Stream |
| 28 | Hàm int scanf(const char *format, ...) Đọc input đã được định dạng từ stdin |
| 29 | Hàm int sscanf(const char *str, const char *format, ...) Đọc input đã được định dạng từ một chuỗi string |
| 30 | Lấy ký tự kế tiếp (một unsigned char) từ Stream đã cho và tăng position indicator cho Stream đó |
| 31 | Hàm char *fgets(char *str, int n, FILE *stream) Đọc một dòng từ Stream đã cho và lưu trữ nó vào trong chuỗi được trỏ bởi str. Nó dừng khi gặp bất cứ điều kiện nào sau: (n-1) ký tự đã được đọc, ký tự newline (dòng mới) được đọc hoặc bắt gặp end-of-file |
| 32 | Hàm int fputc(int char, FILE *stream) Ghi một ký tự (một unsigned char) đã được xác định bởi tham số char tới Stream đã cho và tăng position indicator cho Stream |
| 33 | Hàm int fputs(const char *str, FILE *stream) Ghi một chuỗi tới Stream đã xác định (không ghi ký tự null) |
| 34 | Lấy ký tự kế tiếp (một unsigned char) từ Stream đã cho và tăng position indicator cho Stream đó |
| 35 | Lấy một ký tự (một unsigned char) từ stdin |
| 36 | Đọc một dòng từ stdin và lưu trữ nó bên trong chuỗi được trỏ bởi str. Nó dừng khi bắt gặp end-of-file hoặc ký tự newline (dòng mới) được đọc |
| 37 | Hàm int putc(int char, FILE *stream) Ghi một ký tự (một unsigned char) được xác định bởi tham số char tới Stream đã cho và tăng position indicator cho Stream đó |
| 38 | Ghi một ký tự (một unsigned char) đã được xác định bởi tham số char tới stdout |
| 39 | Ghi một chuỗi str tới stdout (không ghi ký tự null). Một ký tự newline (dòng mới) được phụ thêm tới output |
| 40 | Hàm int ungetc(int char, FILE *stream) Đẩy ký tự char (là một unsigned char) lên trên Stream đã cho để mà ký tự kế tiếp được đọc |
| 41 | Hàm void perror(const char *str) In một thông điệp mô tả lỗi tới stderr. Đầu tiên thì chuỗi str được in được theo sau bởi một dấu hai chấm và sau đó là một space |
stdlib.h trong C
Header file có tên stdlib.h trong Thư viện C chuẩn định nghĩa 4 kiểu biến, một số macro và các hàm đa dạng để thực hiện các tính năng chung.
Các biến được định nghĩa trong stdlib.h
Dưới đây liệt kê một số kiểu biến được định nghĩa trong stdlib.h:
| Biến | Mô tả |
|---|---|
| size_t | Đây là kiểu nguyên không dấu và là kết quả của từ khóa sizeof |
| wchar_t | Đây là một kiểu nguyên có kích cỡ là một hằng wide char |
| div_t | Đây là cấu trúc được trả về bởi hàm div |
| ldiv_t | Đây là cấu trúc được trả về bởi hàm ldiv |
Các macro được định nghĩa trong stdlib.h
Bảng dưới liệt kê một số Macro được định nghĩa trong stdlib.h:
| Macro | Mô tả |
|---|---|
| NULL | Macro này là giá trị của một hằng con trỏ null |
| EXIT_FAILURE | Đây là giá trị cho hàm exit để trả về trong trường hợp thất bại |
| EXIT_SUCCESS | Đây là giá trị cho hàm exit để trả về trong trường hợp thành công |
| RAND_MAX | Macro này là giá trị lớn nhất được trả về bởi hàm rand |
| MB_CUR_MAX | Macro này là số byte lớn nhất trong một tập ký tự có nhiều byte mà không thể lớn hơn MB_LEN_MAX |
Các hàm được định nghĩa trong stdlib.h
Sau đây là một số hàm được định nghĩa trong stdio.h:
| STT | Hàm & Miêu tả |
|---|---|
| 1 | Hàm double atof(const char *str) Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số thực dấu chấm động (kiểu double) |
| 2 | Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số nguyên (kiểu int) |
| 3 | Hàm long int atol(const char *str) Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số long int |
| 4 | Hàm double strtod(const char *str, char **endptr) Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số thực dấu chấm động (kiểu double) |
| 5 | Hàm long int strtol(const char *str, char **endptr, int base) Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số long int |
| 6 | Hàm unsigned long int strtoul(const char *str, char **endptr, int base) Chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số unsigned long int |
| 7 | Hàm void *calloc(size_t nitems, size_t size) Cấp phát bộ nhớ được yêu cầu và trả về một con trỏ tới nó |
| 8 | Giải phóng bộ nhớ đã được cấp phát trước đó bởi một lời gọi tới calloc, malloc, hoặc realloc |
| 9 | Cấp phát bộ nhớ được yêu cầu và trả về một con trỏ tới nó |
| 10 | Hàm void *realloc(void *ptr, size_t size) Cố gắng để phục hồi khối bộ nhớ được trỏ tới bởi str mà đã được cấp phát trước đó với một lời gọi tới malloc hoặc calloc |
| 11 | Gây ra một sự kết thúc chương trình bất thường |
| 12 | Hàm int atexit(void (*func)(void)) Làm cho hàm func đã cho để được gọi khi chương trình kết thúc theo cách thông thường |
| 13 | Làm chương trình kết thúc một cách thông thường |
| 14 | Hàm char *getenv(const char *name) Tìm kiếm chuỗi môi trường được trỏ tới bởi name và trả về giá trị gắn kết với chuỗi đó |
| 15 | Hàm int system(const char *string) Lệnh được xác định bởi string được truyền tới môi trường host để được thực hiện bởi Command Processor |
| 16 | Thực hiện một Binary Search |
| 17 | Hàm void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) Sắp xếp một mảng |
| 18 | Trả về giá trị tuyệt đối của x |
| 19 | Hàm div_t div(int numer, int denom) Chia tử số numer cho mẫu số demon |
| 20 | Trả về giá trị tuyệt đối của x |
| 21 | Hàm ldiv_t ldiv(long int numer, long int denom) Chia tử số numer cho mẫu số demon |
| 22 | Trả về một số ngẫu nhiên trong dãy giá trị từ 0 tới RAND_MAX |
| 23 | Hàm void srand(unsigned int seed) Hàm này cung cấp seed cho bộ sinh số ngẫu nhiên được sử dụng bởi hàm rand |
| 24 | Hàm int mblen(const char *str, size_t n) Trả về độ dài của một multi-byte char được trỏ tới bởi tham số str |
| 25 | Hàm size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) Chuyển đổi chuỗi các multi-byte char được trỏ tới bởi tham số str thành mảng được trỏ tới bởi pwcs |
| 26 | Hàm int mbtowc(whcar_t *pwc, const char *str, size_t n) Chuyển đổi một multi-byte sequence thành một wide char |
| 27 | Hàm size_t wcstombs(char *str, const wchar_t *pwcs, size_t n) Chuyển đổi các code được lưu trữ trong mảng pwcs thành các multi-byte char và lưu trữ chúng trong chuỗi str |
| 28 | Hàm int wctomb(char *str, wchar_t wchar) Chuyển đổi wide char thành biểu diễn multi-byte char của nó và lưu trữ nó tại phần đầu mảng ký tự được trỏ tới bởi str |
string.h trong C
Header file có tên string.h trong Thư viện C chuẩn định nghĩa một kiểu biến, một macro và các hàm đa dạng để thao tác các mảng ký tự.
Các biến được định nghĩa trong string.h
Bảng dưới liệt kê các kiểu biến đã được định nghĩa trước trong string.h:
size_t: Đây là kiểu nguyên không dấu và là kết quả của từ khóa sizeof
Các macro được định nghĩa trong string.h
Bảng sau liệt kê các macro đã được định nghĩa trước trong string.h:
NULL: Macro này là giá trị của một hằng con trỏ null
Các hàm được định nghĩa trong string.h
Dưới đây là một số hàm được định nghĩa trong string.h:
| STT | Hàm & Mô tả |
|---|---|
| 1 | Hàm void *memchr(const void *str, int c, size_t n) Tìm kiếm sự xuất hiện đầu tiên của ký tự c (một unsigned char) trong n byte đầu tiên của chuỗi được trỏ tới bởi tham số str. |
| 2 | Hàm int memcmp(const void *str1, const void *str2, size_t n) So sánh n byte đầu của hai chuỗi str1 và str2. |
| 3 | Hàm void *memcpy(void *dest, const void *src, size_t n) Sao chép n ký tự từ src tới dest |
| 4 | Hàm void *memmove(void *dest, const void *src, size_t n) Hàm khác để sao chép n ký tự từ src tới dest |
| 5 | Hàm void *memset(void *str, int c, size_t n) Sao chép ký tự c (một unsigned char) tới n ký tự đầu tiên của chuỗi được trỏ tới bởi tham số str. |
| 6 | Hàm char *strcat(char *dest, const char *src) Phụ thêm (append) chuỗi được trỏ tới bởi src, vào cuối chuỗi được trỏ tới bởi dest |
| 7 | Hàm char *strncat(char *dest, const char *src, size_t n) Phụ thêm (append) chuỗi, được trỏ tới bởi src, vào cuối chuỗi được trỏ tới bởi dest, với độ dài lên tới n ký tự |
| 8 | Hàm char *strchr(const char *str, int c) Tìm kiếm sự xuất hiện đầu tiên của ký tự c (một unsigned char) trong chuỗi được trỏ tới bởi tham số str |
| 9 | Hàm int strcmp(const char *str1, const char *str2) So sánh chuỗi được trỏ tới bởi sr1 với chuỗi được trỏ tới bởi srt2 |
| 10 | Hàm int strncmp(const char *str1, const char *str2, size_t n) So sánh n byte đầu tiên của str1 và str2. |
| 11 | Hàm int strcoll(const char *str1, const char *str2) So sánh chuỗi str1 và str2. Kết quả phụ thuộc vào thiết lập LC_COLLATE |
| 12 | Hàm char *strcpy(char *dest, const char *src) Sao chép chuỗi được trỏ tới bởi src tới dest |
| 13 | Hàm char *strncpy(char *dest, const char *src, size_t n) Sao chép tới n ký tự từ chuỗi được trỏ tới bởi src tới dest |
| 14 | Hàm size_t strcspn(const char *str1, const char *str2) Tính độ dài của đoạn ký tự của chuỗi str1 mà không chứa các ký tự trong str2 |
| 15 | Hàm char *strerror(int errnum) Tìm kiếm một mảng nội tại cho số lỗi errnum và trả về một con trỏ tới một chuỗi thông báo lỗi |
| 16 | Hàm size_t strlen(const char *str) Tính toán độ dài của chuỗi str (không bao gồm ký tự null kết thúc) |
| 17 | Hàm char *strpbrk(const char *str1, const char *str2) Tìm ký tự đầu tiên trong chuỗi str1 mà kết nối bất cứ ký tự nào đã được xác định trong str2 |
| 18 | Hàm char *strrchr(const char *str, int c) Tìm kiếm sự xuất hiện cuối cùng của ký tự c (một unsigned char) trong chuỗi được trỏ tới bởi tham số str |
| 19 | Hàm size_t strspn(const char *str1, const char *str2) Tính toán độ dài của đoạn ký tự đầu tiên của chuỗi str1 mà chứa các ký tự trong str2 |
| 20 | Hàm char *strstr(const char *haystack, const char *needle) Tìm kiếm sự xuất hiện cuối cùng của cả chuỗi needle (không bao gồm ký tự null kết thúc) mà có mặt trong chuỗi haystack |
| 21 | Hàm char *strtok(char *str, const char *delim) Chia chuỗi str thành một dãy các token (các chuỗi nhỏ hơn) được phân biệt riêng rẽ bởi dấu tách delim |
| 22 | Hàm size_t strxfrm(char *dest, const char *src, size_t n) Biến đổi n ký tự đầu tiên của chuỗi src vào trong locale hiện tại và đặt chúng trong chuỗi dest |
Header file có tên time.h trong Thư viện C chuẩn định nghĩa 4 kiểu biến, hai macro và các hàm đa dạng để thao tác với date và time.
Các biến được định nghĩa trong time.h
Dưới đây liệt kê một số kiểu biến được định nghĩa trong time.h:
| Biến | Mô tả |
|---|---|
| size_t | Đây là kiểu nguyên không dấu và là kết quả của từ khóa sizeof |
| clock_t | Đây là một kiểu thích hợp để lưu trữ Processor time (thời gian của bộ vi xử lý). |
| time_t is | Đây là một kiểu thích hợp để lưu trữ Calendar time. |
| struct tm | Đây là một cấu trúc được sử dụng để giữ date và time. |
Cấu trúc tm có định nghĩa như sau:
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Các Macro được định nghĩa trong time.h
Bảng dưới liệt kê một số Macro được định nghĩa trong time.h:
- NULL: Macro này là giá trị của một hằng con trỏ null
- CLOCKS_PER_SEC: Macro này biểu diễn tốc độ đồng hồ mỗi giây (Processor Clock per Second).
Các hàm được định nghĩa trong time.h
Sau đây là một số hàm được định nghĩa trong time.h:
| STT | Hàm & Mô tả |
|---|---|
| 1 | Hàm char *asctime(const struct tm *timeptr) Trả về một con trỏ tới một chuỗi biểu diễn ngày và thời gian của cấu trúc timeptr |
| 2 | Trả về tốc độ đồng hồ (processor clock) được sử dụng từ lúc bắt đầu một trình triển khai (thường là lúc bắt đầu chương trình) |
| 3 | Hàm char *ctime(const time_t *timer) Trả về một chuỗi biểu diễn localtime dựa trên tham số timer |
| 4 | Hàm double difftime(time_t time1, time_t time2) Trả về số giây khác nhau giữa time1 và time2 (tức là time1 – time2). |
| 5 | Hàm struct tm *gmtime(const time_t *timer) Giá trị của timer được chia thành cấu trúc tm và được biểu diễn trong UTC, hoặc GMT |
| 6 | Hàm struct tm *localtime(const time_t *timer) Giá trị của timer được chia thành cấu trúc tm và được biểu diễn trong Local Timezone |
| 7 | Hàm time_t mktime(struct tm *timeptr) Chuyển đổi cấu trúc được trỏ tới bởi timeptr vào trong một giá trị time_t theo Local Timezone |
| 8 | Hàm size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) Định dạng thời gian được biểu diễn trong cấu trúc timeptr theo các qui tắc định dạng được định nghĩa trong format và được lưu trữ vào trong str |
| 9 | Hàm time_t time(time_t *timer) Ước lượng Calendar time hiện tại và mã hóa nó vào trong định dạng time_t |
Hàm asctime() trong C
Hàm char *asctime(const struct tm *timeptr) Trả về một con trỏ tới một chuỗi biểu diễn ngày và thời gian của cấu trúc struct timeptr.
Khai báo hàm asctime() trong C:
Dưới đây là phần khai báo cho asctime() trong C:
char *asctime(const struct tm *timeptr)
Tham số:
Tham số timeptr là một con trỏ tới cấu trúc tm mà chứa một Calendar time được chia nhỏ thành các thành phần như sau:
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Trả về giá trị:
Hàm này trả về một chuỗi chứa thông tin date và time trong một định dạng con người có thể đọc Www Mmm dd hh:mm:ss: ở đây Www là ngày trong tuần, Mmm là các ký tự chỉ tháng, dd là ngày của tháng, hh:mm:ss là thời gian và yyyy là năm.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của asctime() trong C:
#include <stdio.h> #include <string.h> #include <time.h> int main() { struct tm t; /* Quantrimang.com */ t.tm_sec = 15; t.tm_min = 16; t.tm_hour = 6; t.tm_mday = 18; t.tm_mon = 6; t.tm_year = 118; t.tm_wday = 5; puts(asctime(&t)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Fri Jul 18 06:16:15 2018
Hàm clock() trong C
Hàm clock_t clock(void) Trả về số tích tắc đồng hồ đã trôi qua từ khi chương trình được chạy. Để lấy số giây được sử dụng bởi CPU, bạn sẽ cần chia cho CLOCKS_PER_SEC.
Trên hệ điều hành 32 bit thì CLOCKS_PER_SEC bằng 1000000, hàm này sẽ trả về cùng giá trị xấp xỉ mỗi 72 phút.
Khai báo hàm clock() trong C:
Dưới đây là phần khai báo cho clock() trong C:
clock_t clock(void)
Tham số:
Hàm này không nhận tham số nào.
Trả về giá trị:
Hàm này trả về số tích tắc đồng hồ đã trôi qua từ khi chương trình được chạy. Nếu thất bại, hàm trả về -1.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của clock() trong C:
#include <time.h> #include <stdio.h> int main() { clock_t start_t, end_t, total_t; int i; start_t = clock(); printf("Bat dau chuong trinh, start_t = %ld\n", start_t); printf("Quet qua mot vong lap lon, start_t = %ld\n", start_t); for(i=0; i< 10000000; i++) { } end_t = clock(); printf("Ket thuc vong lap, end_t = %ld\n", end_t); total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC; printf("Tong thoi gian su dung boi CPU: %f\n", total_t ); printf("Thoat chuong trinh...\n"); return(0); }
Chạy code trên ta nhận được kết quả như sau:
Bat dau chuong trinh, start_t = 884
Quet qua mot vong lap lon, start_t = 884
Ket thuc vong lap, end_t = 32819
Tong thoi gian su dung boi CPU: 0.000000
Thoat chuong trinh...
Hàm ctime() trong C
Hàm char *ctime(const time_t *timer) trả về một chuỗi biểu diễn localtime dựa trên tham số timer
Chuỗi trả về có định dạng sau: Www Mmm dd hh:mm:ss trong đó Www là ngày trong tuần, Mmm là các ký tự chỉ tháng, dd là ngày của tháng, hh:mm:ss là thời gian và yyyy là năm.
Khai báo hàm ctime() trong C:
Dưới đây là phần khai báo cho ctime() trong C:
char *ctime(const time_t *timer)
Tham số:
timer -- Đây là con trỏ tới một đối tượng time_t mà chứa một Calendar time.
Trả về giá trị:
Hàm này trả về một chuỗi chứa thông tin date và time trong một định dạng con người có thể đọc.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của ctime() trong C:
#include <stdio.h> #include <time.h> int main () { time_t curtime; time(&curtime); printf("Thời gian hiện tại = %s", ctime(&curtime)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Thời gian hiện tại = Mon Oct 15 04:49:13 2018
Hàm difftime() trong C
Hàm double difftime(time_t time1, time_t time2) trả về số giây khác nhau giữa time1và time2, ví dụ như là (time1 - time2). Hai time được xác định trong Calendar time, biểu diễn thời gian đã trôi qua từ Epoch (00:00:00 1/1/19700 theo UTC).
Khai báo hàm difftime() trong C:
Dưới đây là phần khai báo cho difftime() trong C:
double difftime(time_t time1, time_t time2)
Tham số:
time1 -- Đây là đối tượng time_t cho thời gian kết thúc.
time2 -- Đây là đối tượng time_t cho thời gian bắt đầu.
Trả về giá trị:
Hàm này trả về số giây khác nhau giữa hai thời gian (time2 – time1) dưới dạng một giá trị double.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của difftime() trong C:
#include <stdio.h> #include <time.h> int main () { time_t start_t, end_t; double diff_t; printf("Bắt đầu chương trình...\n"); time(&start_t); time(&end_t); diff_t = difftime(end_t, start_t); printf("Thời gian thực thi = %f\n", diff_t); printf("Thoát chương trình...\n"); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Bắt đầu chương trình...
Thời gian thực thi = 0.000000
Thoát chương trình...
Hàm gmtime() trong C
Hàm struct tm *gmtime(const time_t *timer) sử dụng giá trị được trỏ tới bởi timer để điền vào một cấu trúc tm với các giá trị mà biểu diễn thời gian tương ứng, được diễn đạt trong UTC hoặc GMT.
Khai báo hàm gmtime() trong C:
Dưới đây là phần khai báo cho gmtime() trong C:
struct tm *gmtime(const time_t *timer)
Tham số:
timeptr -- Đây là con trỏ trỏ tới một giá trị time_t biểu diễn một Calendar time.
Trả về giá trị:
Hàm này trả về con trỏ tới cấu trúc tm với thông tin thời gian được điền vào trong. Dưới đây là chi tiết về cấu trúc timeptr.
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Ví dụ:
Chương trình C sau minh họa cách sử dụng của gmtime() trong C, bạn có thể tham khảo thêm danh sách múi giờ tại đây:
#include <stdio.h> #include <time.h> #define BST (+1) #define CCT (+8) int main () { time_t rawtime; struct tm *info; time(&rawtime); /* Get GMT time */ info = gmtime(&rawtime ); printf("Thời gian hiện tại:\n"); printf("Tại London: %2d:%02d\n", (info->tm_hour+BST)%24, info->tm_min); printf("Tại Trung Quốc: %2d:%02d\n", (info->tm_hour+CCT)%24, info->tm_min); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Thời gian hiện tại:
Tại London: 5:51
Tại Trung Quốc: 12:51
Hàm localtime() trong C
Hàm struct tm *localtime(const time_t *timer) sử dụng time được trỏ tới bởi timer để điền một cấu trúc tm với các giá trị mà biểu diễn Local time tương ứng. Giá trị của timer được chia vào trong cấu trúc tm và được diễn đạt trong Local Timezone.
Khai báo hàm localtime() trong C:
Dưới đây là phần khai báo cho localtime() trong C:
struct tm *localtime(const time_t *timer)
Tham số:
timer -- Là con trỏ trỏ tới giá trị time_t biểu diễn một calendar time.
Trả về giá trị:
Hàm này trả về con trỏ tới cấu trúc tm với thông tin thời gian được điền vào trong. Dưới đây là chi tiết về cấu trúc timeptr.
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Ví dụ:
Chương trình C sau minh họa cách sử dụng của localtime() trong C:
#include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm *info; char buffer[80]; time( &rawtime ); info = localtime( &rawtime ); printf("Local time và Local date hiện tại là: \n%s", asctime(info)); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Local time và Local date hiện tại là:
Mon Oct 15 11:56:31 2018
Hàm mktime() trong C
Hàm time_t mktime(struct tm *timeptr) chuyển đổi cấu trúc được trỏ tới bởi timeptr vào trong một giá trị time_t theo Local Timezone.
Khai báo hàm mktime() trong C:
Dưới đây là phần khai báo cho mktime() trong C:
time_t mktime(struct tm *timeptr)
Tham số:
timeptr -- là con trỏ trỏ tới giá trị time_t biểu diễn một calendar time, mà được chia nhỏ thành các thành phần với cấu trúc:
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Trả về giá trị:
Hàm này trả về giá trị time_t tương ứng với tham số calendar time đã truyền. Nếu có lỗi, hàm này trả về giá trị -1.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của mktime() trong C:
#include <stdio.h> #include <time.h> int main () { int ret; struct tm info; char buffer[80]; info.tm_year = 2016 - 1900; info.tm_mon = 7 - 1; info.tm_mday = 4; info.tm_hour = 0; info.tm_min = 0; info.tm_sec = 1; info.tm_isdst = -1; ret = mktime(&info); if( ret == -1 ) { printf("Error: không thể lấy time bằng cách sử dụng mktime\n"); } else { strftime(buffer, sizeof(buffer), "%c", &info ); printf(buffer); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Mon Jul 4 00:00:01 2016
Hàm strftime() trong C
Hàm size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) định dạng thời gian được biểu diễn trong cấu trúc timeptr theo các qui tắc định dạng được định nghĩa trong format và được lưu trữ vào trong str.
Khai báo hàm strftime() trong C:
Dưới đây là phần khai báo cho strftime() trong C:
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
Tham số:
str -- Đây là con trỏ tới mảng đích, nơi mà chuỗi kết quả được sao chép.
maxsize -- Đây là số ký tự tối đa để được sao chép tới str.
format -- Đây là chuỗi chứa bất cứ tổ hợp nào của các ký tự thông thường và các format specifier đặc biệt. Những format specifier này được thay thế bởi hàm này bởi các giá trị tương ứng để biểu diễn thời gian được xác định trong tm. Các format specifier là:
| Specifier | Thay thế cho | Ví dụ |
|---|---|---|
| %a | Tên ngày trong tuần viết tắt | Sun |
| %A | Tên ngày trong tuần đầy đủ | Sunday |
| %b | Tên tháng viết tắt | Mar |
| %B | Tên tháng đầy đủ | March |
| %c | Biểu diễn date và time | Sun Aug 19 02:56:02 2012 |
| %d | Ngày trong tháng (01-31) | 19 |
| %H | Giờ, trong định dạng 24h (00-23) | 14 |
| %I | Giờ, trong định dạng 12h (01-12) | 05 |
| %j | Ngày trong năm (001-366) | 231 |
| %m | Tháng, dưới dạng biểu diễn số (01-12) | 08 |
| %M | Phút (00-59) | 55 |
| %p | AM hoặc PM | PM |
| %S | Giây (00-61) | 02 |
| %U | Số tuần, có ngày Chủ nhật đầu tiên là ngày đầu tiên của tuần (00-53) | 33 |
| %w | Ngày trong tuần dưới dạng biểu diễn số (0-6) | 4 |
| %W | Số tuần, có ngày thứ Hai đầu tiên là ngày đầu tiên của tuần (00-53) | 34 |
| %x | Biểu diễn date | 08/19/12 |
| %X | Biểu diễn time | 02:50:06 |
| %y | Năm, biểu diễn dưới dạng hai số cuối (00-99) | 01 |
| %Y | Năm | 2012 |
| %Z | Tên Timezone | CDT |
| %% | Ký hiệu % | % |
timeptr -- là con trỏ trỏ tới giá trị time_t biểu diễn một calendar time, mà được chia nhỏ thành các thành phần với cấu trúc:
struct tm { int tm_sec; /* biểu diễn giây, từ 0 tới 59 */ int tm_min; /* biểu diễn phút, từ 0 tới 59 */ int tm_hour; /* biểu diễn giờ, từ 0 tới 23 */ int tm_mday; /* biểu diễn ngày của tháng, từ 1 tới 31 */ int tm_mon; /* biểu diễn tháng, từ 0 tới 11 */ int tm_year; /* biểu diễn năm, bắt đầu từ 1900 */ int tm_wday; /* ngày trong tuần, từ 0 tới 6 */ int tm_yday; /* ngày trong năm, từ 0 tới 365 */ int tm_isdst; /* biểu diễn Daylight Saving Time */ };
Trả về giá trị:
Nếu chuỗi kết quả có kích cỡ nhỏ hơn kích cỡ các ký tự (bao gồm ký tự null kết thúc), thì toàn bộ ký tự được sao chép tới str (không bao gồm ký tự null kết thúc) được trả về. Nếu không, hàm trả về 0.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của strftime() trong C:
#include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm *info; char buffer[80]; time( &rawtime ); info = localtime( &rawtime ); strftime(buffer,80,"%x - %I:%M%p", info); printf("Date & time đã định dạng theo hàm strftime là: \n|%s|\n", buffer ); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Date & time đã định dạng theo hàm strftime là:
|10/15/18 - 04:58AM|
Hàm time() trong C
Hàm time_t time(time_t *seconds) trả về thời gian từ Epoch (00:00:00 1/1/1970 theo UTC), được ước lượng bằng giây. Nếu tham số seconds không là NULL, thì giá trị trả về cũng được lưu trữ trong biến seconds.
Khai báo hàm time() trong C:
Dưới đây là phần khai báo cho time() trong C:
time_t time(time_t *t)
Tham số:
seconds -- Đây là con trỏ tới một đối tượng của kiểu time_t, nơi giá trị seconds sẽ được lưu trữ.
Trả về giá trị:
Hàm trả về Calendar time hiện tại dưới dạng một đối tượng time_t.
Ví dụ:
Chương trình C sau minh họa cách sử dụng của time() trong C:
#include <stdio.h> #include <time.h> int main () { time_t seconds; seconds = time(NULL); printf("Số giờ (h) bắt đầu từ 1/1/1970 = %ld giờ\n", seconds/3600); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Số giờ (h) bắt đầu từ 1/1/1970 = 427660 giờ
0 Nhận xét