Hàm int raise(int sig) trong Thư viện C tạo tín hiệu sig. Tham số sig là tương thích với macro SIG.
Khai báo hàm raise() trong C
Dưới đây là phần khai báo cho hàm signal() trong C:
int raise(int sig)
Tham số
sig − This is the signal number to send. Following are few important standard signal constantstrong Thư viện C:
macro | signal |
---|---|
SIGABRT | (Signal Abort) Sự kết thúc bất thường, chẳng hạn như được khởi tạo bởi hàm abort |
SIGFPE | (Signal Floating-Point Exception) Hoạt động liên quan tới số học không đúng, như chia cho số 0 hoặc tràn luồng (overflow) |
SIGILL | (Signal Illegal Instruction) Một chỉ lệnh hàm không hợp lệ |
SIGINT | (Signal Interrupt) Tín hiệu ngắt, thường tạo bởi ứng dụng người dùng |
SIGSEGV | (Signal Segmentation Violation) Truy cập không hợp lệ tới kho lưu (storage), khi một chương trình cố gắng đọc hoặc ghi bên ngoài bộ nhớ đã được cấp phát cho nó |
SIGTERM | (Signal Terminate) Yêu cầu kết thúc được gửi tới chương trình |
Trả về giá trị
Hàm này trả về 0 nếu thành công. Nếu không, hàm trả về giá trị khác 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm signal() trong C:
#include <signal.h> #include <stdio.h> #include <stdlib.h> void signal_catchfunc(int); int main() { int ret; ret = signal(SIGINT, signal_catchfunc); if( ret == SIG_ERR) { printf("Error: khong the thiet lap signal handler.\n"); exit(0); } printf("Chuan bi tao mot tin hieu\n"); ret = raise(SIGINT); if( ret !=0 ) { printf("Error: khong the tao tin hieu SIGINT.\n"); exit(0); } printf("Dang thoat ...\n"); return(0); } void signal_catchfunc(int signal) { printf("!!! Tin hieu da duoc bat !!!\n"); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Chuan bi tao mot tin hieu !!! Tin hieu da duoc bat !!! Dang thoat ...
Hàm void (*signal(int sig, void (*func)(int)))(int) trong Thư viện C thiết lập một hàm để xử lý tín hiệu (ví dụ: một signal handler).
Khai báo hàm signal() trong C
Dưới đây là phần khai báo cho hàm signal() trong C:
void (*signal(int sig, void (*func)(int)))(int)
Tham số
sig − Đây là tín hiệu số để một hàm xử lý được thiết lập. Dưới đây liệt kê một số tín hiệu số quan trọng.
macro | signal |
---|---|
SIGABRT | (Signal Abort) Sự kết thúc bất thường |
SIGFPE | (Signal Floating-Point Exception) Hoạt động liên quan tới số học không đúng, như chia cho số 0 hoặc tràn luồng (overflow) |
SIGILL | (Signal Illegal Instruction) Một chỉ lệnh hàm không hợp lệ |
SIGINT | (Signal Interrupt) Tín hiệu ngắt, thường tạo bởi ứng dụng người dùng |
SIGSEGV | (Signal Segmentation Violation) Truy cập không hợp lệ tới kho lưu (storage), khi một chương trình cố gắng đọc hoặc ghi bên ngoài bộ nhớ đã được cấp phát cho nó |
SIGTERM | (Signal Terminate) Yêu cầu kết thúc được gửi tới chương trình |
func − Đây là một con trỏ tới một hàm. Đây có thể là một hàm được định nghĩa bởi lập trình viên hoặc một trong các hàm được định nghĩa trước sau:
SIG_DFL | Xử lý mặc định: Tín hiệu được xử lý bởi hành động mặc định cho tín hiệu cụ thể đó. |
SIG_IGN | Bỏ qua tín hiệu: Tín hiệu bị bỏ qua. |
Trả về giá trị
Hàm này trả về giá trị trước của Signal Handler hoặc SIG_ERR trên lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm signal() trong C:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> void sighandler(int); int main() { signal(SIGINT, sighandler); while(1) { printf("Chuan bi sleep trong mot vai giay ...\n"); sleep(1); } return(0); } void sighandler(int signum) { printf("Bat duoc tin hieu %d, chuan bi thoat ...\n", signum); exit(1); }
Biên dịch và chạy chương trình C trên sẽ tạo một vòng lặp vô hạn. Để thoát chương trình, bạn nhấn phím CTRL + C.
Hàm int fclose(FILE *stream) trong Thư viện C đóng Stream. Tất cả Buffer (bộ đệm) bị Flush (xóa sạch hoặc chuyển hết ra ngoại vi).
Khai báo hàm fclose() trong C
Dưới đây là phần khai báo cho hàm fclose() trong C:
int fclose(FILE *stream)
Tham số
stream − Đây là con trỏ tới đối tượng FILE xác định Stream để được đóng.
Trả về giá trị
Phương thức này trả về 0 nếu Stream được đóng thành công. Nếu thất bại, EOF được trả về.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fclose() trong C:
#include <stdio.h> int main() { FILE *fp; fp = fopen("baitapc.txt", "w"); fprintf(fp, "%s", "Hoc C co ban va nang cao tai QTM !!!"); fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ tạo một baitapc.txt, và sau đó nó sẽ ghi dòng text sau và cuối cùng nó sẽ đóng file này bởi sử dụng hàm fclose(). Và xem kết quả.
Hàm void clearerr(FILE *stream) trong Thư viện C xóa end-of-file và error indicator cho Stream đã cho.
Khai báo hàm clearerr() trong C
Dưới đây là phần khai báo cho hàm clearerr() trong C:
void clearerr(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
Trả về giá trị
Hàm này nên thất bại và không thiết lập biến ngoại vi errno nhưng trong trường hợp nó phát hiện rằng các tham số của nó không là một stream hợp lệ, nó phải trả về -1 và thiết lập errno thành EBADF.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm clearerr() trong C:
#include <stdio.h> int main() { FILE *fp; char c; fp = fopen("baitapc.txt", "w"); c = fgetc(fp); if( ferror(fp) ) { printf("Da xay ra loi trong khi doc baitapc.txt\n"); } clearerr(fp); if( ferror(fp) ) { printf("Da xay ra loi trong khi doc baitapc.txt\n"); } fclose(fp); return(0); }
Giả sử chúng ta có một text file có tên là baitapc.txt, là một file trống. Biên dịch và chạy chương trình này sẽ cho kết quả như sau. Bởi vì chúng ta cố gắng đọc một file mà đã mở trong chế độ chỉ ghi (write only).
Hàm int feof(FILE *stream) trong Thư viện C chuẩn kiểm tra end-of-file indicator cho Stream đã cho.
Khai báo hàm feof() trong C
Dưới đây là phần khai báo cho hàm feof() trong C:
int feof(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
Trả về giá trị
Hàm này trả về một giá trị khác không khi End-Of-File Indicator mà gắn kết với Stream được thiết lập, nếu không thì hàm này trả về 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm feof() trong C:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); if(fp == NULL) { perror("Da xay ra loi trong khi mo baitapc.txt"); return(-1); } while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Giả sử chúng ta có một baitapc.txt có nội dung sau. File này sẽ được sử dụng như một input cho chương trình C của chúng ta:
Hoc C co ban va nang cao tai QTM
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm int ferror(FILE *stream) trong Thư viện C chuẩn kiểm tra error indicator cho Stream đã cho.
Khai báo hàm ferror() trong C
Dưới đây là phần khai báo cho hàm ferror() trong C:
int ferror(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
Trả về giá trị
Nếu Error Indicator mà gắn kết với Stream được thiết lập, thì hàm trả về một giá trị khác 0. Nếu không, hàm trả về giá trị 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm ferror() trong C:
#include <stdio.h> int main() { FILE *fp; char c; fp = fopen("baitapc.txt", "w"); c = fgetc(fp); if( ferror(fp) ) { printf("Da xay ra loi trong khi doc baitapc.txt\n"); } clearerr(fp); if( ferror(fp) ) { printf("Da xay ra loi trong khi doc baitapc.txt\n"); } fclose(fp); return(0); }
Giả sử chúng ta có một text file có tên là baitapc.txt, là một file trống. Biên dịch và chạy chương trình này sẽ cho kết quả như sau. Bởi vì chúng ta cố gắng đọc một file mà đã mở trong chế độ write only.
Hàm int fflush(FILE *stream) trong Thư viện C chuẩn flush bộ đệm đầu ra của một Stream.
Khai báo hàm fflush() trong C
Dưới đây là phần khai báo cho hàm fflush() trong C:
int fflush(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà xác định một Stream được đệm.
Trả về giá trị
Hàm này trả về một giá trị 0 nếu thành công. Nếu có một lỗi xảy ra, EOF được trả về và Error Indicator được thiết lập (ví dụ feof).
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fflush() trong C:
#include <stdio.h> #include <string.h> int main() { char buff[1024]; memset( buff, '\0', sizeof( buff )); fprintf(stdout, "Chuan bi buffer\n"); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "Hoc C co ban va nang cao tai QTM !!!\n"); fprintf(stdout, "Ket qua nay se duoc dem\n"); fflush( stdout ); return(0); }
Biên dịch và chạy chương trình trên sẽ cho kết quả sau. Ở đây, chương trình vẫn đệm output vào trong buff tới khi nó bắt gặp lời gọi đầu tới hàm fflush(), sau đó nó lại bắt đầu đệm output.
Hàm int fgetpos(FILE *stream, fpos_t *pos) trong Thư viện C chuẩn lấy vị trí file hiện tại của Stream và ghi nó tới pos.
Khai báo hàm fgetpos() trong C
Dưới đây là phần khai báo cho hàm fgetpos() trong C:
int fgetpos(FILE *stream, fpos_t *pos)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
pos − Đây là con trỏ tới một đối tượng fpos_t.
Trả về giá trị
Hàm này trả về 0 nếu thành công, và trả về giá trị khác 0 nếu có một lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fgetpos() trong C:
#include <stdio.h> int main () { FILE *fp; fpos_t position; fp = fopen("baitapc.txt","w+"); fgetpos(fp, &position); fputs("Hello, World!", fp); fsetpos(fp, &position); fputs("Noi dung nay se ghi de phan noi dung da co truoc trong file", fp); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên để tạo một baitapc.txt có nội dung sau. Đầu tiên chúng ta lấy vị trí ban đầu của file bởi sử dụng hàm fgetpost() và sau đó chúng ta ghi Hello, World! trong file này, sau đó chúng ta sử dụng hàm fsetpos() để phục hồi con trỏ ghi về vị trí đầu của file và sau đó ghi đè file với nội dung sau:
Bây giờ bạn theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; int n = 0; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm FILE *fopen(const char *filename, const char *mode) trong Thư viện C chuẩn mở file được trỏ tham số filename bởi sử dụng chế độ mode đã cho.
Khai báo hàm fopen() trong C
Dưới đây là phần khai báo cho hàm fopen() trong C:
FILE *fopen(const char *filename, const char *mode)
Tham số
filename − Đây là chuỗi chứa tên file để được mở.
mode − Đây là chuỗi chứa một chế độ truy cập file. Nó bao gồm:
mode | Miêu tả |
---|---|
"r" | Mở một file để đọc. File phải tồn tại |
"w" | Tạo một file trống để ghi. Nếu một file với cùng tên đã tồn tại, nội dung của nó bị tẩy đi và file được xem như một file trống mới |
"a" | Phụ thêm (append) tới một file. Với các hoạt động ghi, phụ thêm dữ liệu tại cuối file. File được tạo nếu nó chưa tồn tại |
"r+" | Mở một file để ghi và đọc. File phải tồn tại |
"w+" | Tạo một file trống để ghi và đọc |
"a+" | Mở một file để đọc và phụ thêm |
Trả về giá trị
Hàm này trả về một con trỏ FILE. Nếu không, NULL được trả về và biến toàn cục errno được thiết lập để chỉ lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fopen() trong C:
#include <stdio.h> #include <stdlib.h> int main() { FILE * fp; fp = fopen ("baitapc.txt", "w+"); fprintf(fp, "%s %s %s %s", "Chung", "toi", "la", "QTMTeam"); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo một baitapc.txt
Bây giờ theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) trong Thư viện C chuẩn reads data from the given stream into the array pointed to, by ptr.
Khai báo hàm fread() trong C
Dưới đây là phần khai báo cho hàm fread() trong C:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
Tham số
ptr − Đây là con trỏ tới một khối bộ nhớ với kích cỡ tối thiểu là size*nmemb byte.
size − Đây là kích cỡ (giá trị byte) của mỗi phần tử được đọc.
nmemb − Đây là số phần tử, với mỗi phần tử có kích cỡ là size byte.
stream − Đây là con trỏ tới một đối tượng FILE mà xác định một Input Stream.
Trả về giá trị
Tổng số phần tử được đọc thành công được trả về dưới dạng một đối tượng size_t, mà là một kiểu dữ liệu nguyên. Nếu số này khác với tham số nmemb, thì hoặc một lỗi đã xảy ra hoặc bắt gặp End-Of-File.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fread() trong C:
#include <stdio.h> #include <string.h>int main() { FILE *fp; char c[] = "Hoc C co ban va nang cao tai QTM !!!"; char buffer[100]; /* mo file de doc va ghi */ fp = fopen("baitapc.txt", "w+"); /* Ghi du lieu vao file */ fwrite(c, strlen(c) + 1, 1, fp); /* thiet lap vi tri con tro tim kiem ve dau file */ fseek(fp, SEEK_SET, 0); /* Doc va hien thi du lieu */ fread(buffer, strlen(c)+1, 1, fp); printf("%s\n", buffer); fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm FILE *freopen(const char *filename, const char *mode, FILE *stream) trong Thư viện C chuẩn gắn kết một filename mới với Stream đã cho và cùng lúc đó đóng FILE cũ trong Stream.
Khai báo hàm freopen() trong C
Dưới đây là phần khai báo cho hàm freopen() trong C:
FILE *freopen(const char *filename, const char *mode, FILE *stream)
Tham số
filename − Đây là chuỗi chứa tên file để được mở.
mode − Đây là chuỗi chứa chế độ truy vập file. Bao gồm:
mode | Miêu tả |
---|---|
"r" | Mở một file để đọc. File phải tồn tại |
"w" | Tạo một file trống để ghi. Nếu một file với cùng tên đã tồn tại, nội dung của nó bị tẩy đi và file được xem như một file trống mới |
"a" | Phụ thêm (append) tới một file. Với các hoạt động ghi, phụ thêm dữ liệu tại cuối file. File được tạo nếu nó chưa tồn tại |
"r+" | Mở một file để ghi và đọc. File phải tồn tại |
"w+" | Tạo một file trống để ghi và đọc |
"a+" | Mở một file để đọc và phụ thêm |
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream để được mở lại.
Trả về giá trị
Nếu file được mở lại thành công, hàm trả về một con trỏ tới một đối tượng nhận diện Stream đó, nếu không thì con trỏ null được trả về.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm freopen() trong C:
#include <stdio.h> int main () { FILE *fp; printf("Dong text nay hien thi tren stdout\n"); fp = freopen("baitapc.txt", "w+", stdout); printf("Dong text nay duoc ghi vao baitapc.txt\n"); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ gửi dòng sau tại STDOUT trước:
Sau lời gọi tới hàm freopen(), nó gắn kết STDOUT tới baitapc.txt, vì thế bất cứ cái gì chúng ta ghi tại STDOUT sẽ đi vào trong baitapc.txt. Vì thế, baitapc.txt sẽ có nội dung sau:
Bây giờ bạn theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
Hàm int fseek(FILE *stream, long int offset, int whence) trong Thư viện C chuẩn 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.
Khai báo hàm fseek() trong C
Dưới đây là phần khai báo cho hàm fseek() trong C:
int fseek(FILE *stream, long int offset, int whence)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
offset − Đây là số byte để offset từ đó.
whence − Đây là vị trí từ đó offset được thêm vào. Nó được xác định bởi một trong số các hằng sau:
Hằng | Miêu tả |
---|---|
SEEK_SET | Phần đầu file |
SEEK_CUR | Vị trí hiện tại của con trỏ file |
SEEK_END | Phần cuối file |
Trả về giá trị
Hàm này trả về 0 nếu thành công. Nếu không, hàm trả về giá trị khác 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fseek() trong C:
#include <stdio.h> int main () { FILE *fp; fp = fopen("baitapc.txt","w+"); fputs("Hoc C co ban va nang cao tai QTM !!!", fp); fseek( fp, 4, SEEK_SET ); fputs(" lap trinh C", fp); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo baitapc.txt với nội dung sau. Lúc đầu, chương trình tạo file và ghi Hoc C co ban va nang cao tai QTM !!! nhưng sau đó chúng ta đã phục hồi con trỏ ghi tại vị trí thứ 4 bắt đầu từ phần đầu file và sử dụng lệnh puts().
Bây giờ theo dõi nội dung sau của file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm int fsetpos(FILE *stream, const fpos_t *pos) trong Thư viện C chuẩn 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.
Khai báo hàm fsetpos() trong C
Dưới đây là phần khai báo cho hàm fsetpos() trong C:
int fsetpos(FILE *stream, const fpos_t *pos)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
pos − Đây là con trỏ tới một đối tượng fpos_t object chứa một vị trí được thu nhận trước đó với hàm fgetpos.
Trả về giá trị
Hàm này trả về giá trị 0 nếu thành công, hoặc nếu không nó trả về một giá trị khác 0 và thiết lập biến toàn cục errno tới một giá trị dương, mà có thể được thông dịch với perror.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fsetpos() trong C:
#include <stdio.h> int main () { FILE *fp; fpos_t position; fp = fopen("baitapc.txt","w+"); fgetpos(fp, &position); fputs("Hello, World!", fp); fsetpos(fp, &position); fputs("Dong nay se ghi de phan noi dung da co truoc do", fp); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên để tạo một baitapc.txt sẽ có nội dung sau. Đầu tiên chúng ta lấy vị trí ban đầu của file bởi sử dụng hàm fgetpos(), và sau đó chúng ta ghi Hello, World! trong file, sau đó chúng ta sử dụng hàm fsetpos() để phục hồi con trỏ ghi về đầu file và sau đó ghi đè file với nội dung sau:
Bây giờ theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm long int ftell(FILE *stream) trong Thư viện C chuẩn trả về vị trí file hiện tại của Stream đã cho.
Khai báo hàm ftell() trong C
Dưới đây là phần khai báo cho hàm ftell() trong C:
long int ftell(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
Trả về giá trị
Hàm này trả về giá trị hiện tại của position indicator. Nếu một lỗi xuất hiện, -1 được trả về, và biến toàn cục errno được thiết lập tới một giá trị dương.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm ftell() trong C:
#include <stdio.h> int main () { FILE *fp; int len; fp = fopen("baitapc.txt", "r"); if( fp == NULL ) { perror ("Xay ra loi khi mo file!!!"); return(-1); } fseek(fp, 0, SEEK_END); len = ftell(fp); fclose(fp); printf("Tong kich co cua baitapc.txt = %d bytes\n", len); return(0); }
Giả sử chúng ta có baitapc.txt có nội dung sau:
Hoc C co ban va nang cao tai QTM !!!
Biên dịch và thực thi chương trình trên sẽ cho kết quả sau nếu file có nội dung trên, nếu không thì nó sẽ cho kết quả khác tùy thuộc vào nội dung file.
Hàm size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) trong Thư viện C chuẩn ghi dữ liệu từ mảng được trỏ bởi ptr tới Stream đã cho.
Khai báo hàm fwrite() trong C
Dưới đây là phần khai báo cho hàm fwrite() trong C:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
Tham số
ptr − Đây là con trỏ tới mảng các phần tử được ghi.
size − Đây là kích cỡ (giá trị byte) của mỗi phần tử được ghi.
nmemb − Đây là số phần tử, với mỗi phần tử có kích cỡ là size byte.
stream − Đây là con trỏ tới một đối tượng FILE mà xác định một Output Stream.
Trả về giá trị
Hàm này trả về tổng số phần tử được trả về thành công dưới dạng một đối tượng size_t, mà là một kiểu dữ liệu nguyên. Nếu số này khác tham số nmemb, nó sẽ chỉ một lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fwrite() trong C:
#include<stdio.h> int main () { FILE *fp; char str[] = "Hoc C co ban va nang cao tai QTM !!!"; fp = fopen( "baitapc.txt" , "w" ); fwrite(str , 1 , sizeof(str) , fp ); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo baitapc.txt
Bây giờ theo dõi nội dung file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả
Hàm int remove(const char *filename) trong Thư viện C chuẩn xóa filename đã cho để nó không thể truy cập được nữa.
Khai báo hàm remove() trong C
Dưới đây là phần khai báo cho hàm remove() trong C:
int remove(const char *filename)
Tham số
filename − Đây là chuỗi chứa tên file để được xóa.
Trả về giá trị
Nếu thành công thì trả về 0. Nếu có lỗi, trả về -1 và errno được thiết lập thích hợp.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm remove() trong C:
#include <stdio.h> #include <string.h> int main () { int ret; FILE *fp; char filename[] = "baitapc.txt"; fp = fopen(filename, "w"); fprintf(fp, "%s", "Hoc C co ban va nang cao tai QTM !!!"); fclose(fp); ret = remove(filename); if(ret == 0) { printf("Xoa file thanh cong !!!"); } else { printf("Error: khong the xoa file tren"); } return(0); }
Giả sử chúng ta có baitapc.txt có một số nội dung. Chúng ta chuẩn bị xóa file này bởi sử dụng chương trình trên. Biên dịch và chạy chương trình trên sẽ cho thông báo sau và file đã bị xóa vĩnh viễn.
Hàm int rename(const char *old_filename, const char *new_filename) trong Thư viện C chuẩn làm cho filename được tham chiếu tới, được thay đổi từ old_filename thành new_filename.
Khai báo hàm rename() trong C
Dưới đây là phần khai báo cho hàm rename() trong C:
int rename(const char *old_filename, const char *new_filename)
Tham số
old_filename − Đây là chuỗi chứa tên file để được đổi tên và/hoặc di chuyển.
new_filename − Đây là chuỗi chứa tên mới cho file.
Trả về giá trị
Nếu thành công thì hàm trả về 0. Nếu có lỗi, hàm trả về -1 và errno được thiết lập thích hợp.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm rename() trong C:
#include <stdio.h> int main () { int ret; char oldname[] = "baitapc.txt"; char newname[] = "baitapc1.txt"; ret = rename(oldname, newname); if(ret == 0) { printf("Doi ten file thanh cong !!!"); } else { printf("Error: khong the doi ten file"); } return(0); }
Giả sử chúng ta có baitapc.txt có một số nội dung. Chúng ta đang chuẩn bị xóa file này bởi sử dụng chương trình trên. Biên dịch và chạy chương trình trên để tạo thông báo sau và file sẽ được đổi tên thành baitapc1.txt.
Hàm void rewind(FILE *stream) trong Thư viện C chuẩn thiết lập vị trí file tới phần đầu của file trong stream đã cho.
Khai báo hàm rewind() trong C
Dưới đây là phần khai báo cho hàm rewind() trong C:
void rewind(FILE *stream)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
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 rewind() trong C:
#include <stdio.h> int main() { char str[] = "Hoc C co ban va nang cao tai QTM !!!"; FILE *fp; int ch; /* Dau tien chung ta ghi mot so noi dung vao baitapc.txt */ fp = fopen( "baitapc.txt" , "w" ); fwrite(str , 1 , sizeof(str) , fp ); fclose(fp); fp = fopen( "baitapc.txt" , "r" ); while(1) { ch = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", ch); } rewind(fp); printf("\n"); while(1) { ch = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", ch); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm void setbuf(FILE *stream, char *buffer) trong Thư viện C chuẩn định nghĩa cách một Stream được đệm. Hàm này nên được gọi một khi file đã gắn kết với Stream đã được mở, nhưng trước khi bất cứ hoạt động input hoặc output nào đã diễn ra.
Khai báo hàm setbuf() trong C
Dưới đây là phần khai báo cho hàm setbuf() trong C:
void setbuf(FILE *stream, char *buffer)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện stream đã mở.
buffer − Đây là Buffer (bộ đệm) đã cấp phát. Nó nên có độ dài ít nhất là BUFSIZ byte, mà là một hằng macro để được sử dụng như là độ dài của mảng này.
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 setbuf() trong C:
#include <stdio.h> int main() { char buf[BUFSIZ]; setbuf(stdout, buf); puts("Hoc C co ban tai QTM !!!"); fflush(stdout); return(0); }
Biên dịch và chạy chương trình trên để cho kết quả sau. Ở đây chương trình gửi output tới STDOUT ngay trước khi nó thoát ra, nếu không thì nó vẫn tiếp tục đệm output. Bạn cũng có thể sử dụng hàm fflush() để flush (xóa hoặc chuyển ra ngoại vi) để xem kết quả.
Hàm int setvbuf(FILE *stream, char *buffer, int mode, size_t size) trong Thư viện C chuẩn xác định cách một Stream nên được đệm (buffer).
Khai báo hàm setvbuf() trong C
Dưới đây là phần khai báo cho hàm setvbuf() trong C:
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện stream đã mở.
buffer − Đây là bộ đệm đã được cấp phát. Nếu được thiết lập là NULL, hàm tự động cấp phát một Buffer với kích cỡ đã xác định.
mode − Xác định chế độ để đệm file.
mode | Miêu tả |
---|---|
_IOFBF | Full buffering − Trên output, dữ liệu được ghi một khi buffer đầy. Trên Input, buffer được điền khi một hoạt động input được yêu cầu và buffer là trống |
_IOLBF | Line buffering − Trên output, dữ liệu được ghi khi gặp: hoặc một ký tự newline (dòng mới) được chèn vào trong Stream hoặc khi buffer đầy. Trên Input, buffer được điền tới ký tự newline (dòng mới) tiếp theo khi một hoạt động input được yêu cầu và buffer là trống |
_IONBF | No buffering − Không có buffer nào được sử dụng. Mỗi hoạt động I/O được ghi ngay khi có thể. Các tham số buffer và size bị bỏ qua |
size − Đây là kích cỡ bộ đệm (giá trị byte).
Trả về giá trị
Hàm này trả về 0 nếu thành công. Nếu không, hàm trả về giá trị khác 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm setvbuf() trong C:
#include <stdio.h> #include <string.h> int main() { char buff[1024]; memset( buff, '\0', sizeof( buff )); fprintf(stdout, "Chuan bi buffer\n"); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "Hoc C co ban va nang cao tai QTM !!!\n"); fprintf(stdout, "Phan noi dung nay se duoc dem\n"); fflush( stdout ); return(0); }
Biên dịch và chạy chương trình trên để cho kết quả sau. Ở đây chương trình vẫn đệm output vào trong buff tới khi nó gặp lời gọi đầu tiên tới hàm fflush(), sau đó nó lại bắt đầu đệm output.
Hàm FILE *tmpfile(void) trong Thư viện C chuẩn Tạo file tạm thời trong chế độ wb+. File tạm thời đã tạo sẽ được tự động xóa khi stream bị đóng (hàm fclose) hoặc khi chương trình kết thúc.
Khai báo hàm tmpfile() trong C
Dưới đây là phần khai báo cho hàm tmpfile() trong C:
FILE *tmpfile(void)
Tham số
Hàm này không nhận bất kỳ tham số nào.
Trả về giá trị
Nếu thành công, hàm này trả về một con trỏ tới file tạm thời đã được tạo. Nếu file này không thể được tạo, thì hàm trả về NULL.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm tmpfile() trong C:
#include <stdio.h> int main () { FILE *fp; fp = tmpfile(); printf("Mot file tam thoi duoc tao !!!\n"); /* truoc khi su dung fclose, ban co the su dung file tam thoi nay */ fclose(fp); return(0); }
Biên dịch và chạy chương trình trên để tạo một file tạm thời trong /tmp folder nhưng khi chương trình thoát ra, nó sẽ tự động bị xóa và chương trình sẽ cho kết quả sau:
Hàm char *tmpnam(char *str) trong Thư viện C chuẩn tạo và trả về một tên file tạm thời (temp file) hợp lệ (chưa tồn tại trước khi tạo). Nếu str là null thì nó trả về tên tmp file.
Khai báo hàm tmpnam() trong C
Dưới đây là phần khai báo cho hàm tmpnam() trong C:
char *tmpnam(char *str)
Tham số
str − Đây là con trỏ tới một mảng ký tự, nơi mà tên tempname đã đề nghị sẽ được lưu trữ dưới dạng một chuỗi.
Trả về giá trị
Giá trị trả về là một con trỏ tới chuỗi chứa tên đề nghị cho một file tạm thời. Nếu str là một con trỏ null, nó trỏ tới một bộ đệm nội tại mà sẽ bị ghi đè trong lần tiếp theo gọi hàm này.
Nếu str không là con trỏ null, str được trả về. Nếu hàm này thất bại trong việc tạo một filename phù hợp, nó trả về một con trỏ null.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm tmpnam() trong C:
#include <stdio.h> int main() { char buffer[L_tmpnam]; char *ptr; tmpnam(buffer); printf("Ten cua temp file thu nhat: %s\n", buffer); ptr = tmpnam(NULL); printf("Ten cua temp file thu hai: %s\n", ptr); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int fprintf(FILE *stream, const char *format,...) trong Thư viện C chuẩn gửi output đã được định dạng tới một Stream.
Khai báo hàm fprintf() trong C
Dưới đây là phần khai báo cho hàm fprintf() trong C:
int fprintf(FILE *stream, const char *format, ...)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
format − Đây là một chuỗi mà chứa text được ghi tới Stream. Nó có thể tùy ý chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:
specifier | Kết quả |
---|---|
c | Ký tự |
d hoặc i | Số nguyên hệ thập phân có dấu |
e | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự e |
E | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự E |
f | Số thực dấu chấm động hệ thập phân |
g | Sử dụng rút gọn của %e hoặc %f |
G | Sử dụng rút gọn của %E hoặc %f |
o | Số bát phân có dấu |
s | Chuỗi ký tự |
u | Số nguyên hệ thập phân không dấu |
x | Số nguyên hệ thập lục phân không dấu |
X | Số nguyên hệ thập lục phân không dấu (các chữ cái hoa) |
p | Địa chỉ con trỏ |
n | Không in cái gì |
% | Ký tự |
flags | Miêu tả |
---|---|
- | Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định |
+ | Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu - |
(space) | Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị |
# | Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ |
0 | Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống |
width | Miêu tả |
---|---|
(number) | Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn |
* | Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
.precision | Miêu tả |
---|---|
.number | Với các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử |
.* | Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
length | Miêu tả |
---|---|
h | Tham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X) |
l | Tham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s |
L | Tham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G) |
Các tham số bổ sung − Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.
Trả về giá trị
Nếu thành công, tổng số ký tự đã được viết được trả về, nếu không sẽ trả về một số âm.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fprintf() trong C:
#include <stdio.h> #include <stdlib.h> int main() { FILE * fp; fp = fopen ("baitapc.txt", "w+"); fprintf(fp, "%s %s %s %s", "Chung", "toi", "la", "QTMTeam"); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo baitapc.txt
Bây giờ sử dụng chương trình C sau để theo dõi nội dung file trên:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả:
Hàm char *gets(char *str) trong Thư viện C chuẩn đọ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.
Hàm gets() khác hàm scanf() ở chỗ là hàm này chấp nhận các chuỗi có khoảng trống.
Khai báo hàm gets() trong C
Dưới đây là phần khai báo cho hàm gets() trong C:
char *gets(char *str)
Tham số
str -- Đây là con trỏ tới mảng các char nơi chuỗi được lưu trữ.
Trả về giá trị
Hàm này trả về str nếu thành công, và NULL nếu có lỗi hoặc xuất hiện End-Of-File, trong khi không có ký tự nào đã được đọc.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm gets() trong C. Bạn sẽ thấy rằng hàm gets() chấp nhận chuỗi có chứa khoảng trống, không giống như hàm scanf():
#include <stdio.h> int main() { char str[50]; printf("Nhap mot chuoi: "); gets(str); printf("Ban vua nhap chuoi: %s", str); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm int sprintf(char *str, const char *format,...) trong Thư viện C chuẩn gửi output đã được định dạng tới một chuỗi str.
Khai báo hàm sprintf() trong C
Dưới đây là phần khai báo cho hàm sprintf() trong C:
int sprintf(char *str, const char *format, ...)
Tham số
str − Đây là con trỏ tới một mảng các phần tử char nơi chuỗi kết quả được lưu trữ.
format − Đây là chuỗi chứa text để được ghi tới buffer. Nó có thể tùy ý chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:
specifier | Kết quả |
---|---|
c | Ký tự |
d hoặc i | Số nguyên hệ thập phân có dấu |
e | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự e |
E | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự E |
f | Số thực dấu chấm động hệ thập phân |
g | Sử dụng rút gọn của %e hoặc %f |
G | Sử dụng rút gọn của %E hoặc %f |
o | Số bát phân có dấu |
s | Chuỗi ký tự |
u | Số nguyên hệ thập phân không dấu |
x | Số nguyên hệ thập lục phân không dấu |
X | Số nguyên hệ thập lục phân không dấu (các chữ cái hoa) |
p | Địa chỉ con trỏ |
n | Không in cái gì |
% | Ký tự |
flags | Miêu tả |
---|---|
- | Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định |
+ | Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu - |
(space) | Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị |
# | Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ |
0 | Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống |
width | Miêu tả |
---|---|
(number) | Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn |
* | Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
.precision | Miêu tả |
---|---|
.number | Với các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử |
.* | Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
length | Miêu tả |
---|---|
h | Tham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X) |
l | Tham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s |
L | Tham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G) |
Các tham số bổ sung − Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.
Trả về giá trị
Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về loại trừ ký tự null được phụ thêm tại cuối chuỗi. Nếu thất bại thì trả về một số âm.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm sprintf() trong C:
#include <stdio.h> #include <math.h> int main() { char str[80]; sprintf(str, "Gia tri cua Pi = %f", M_PI); puts(str); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int vfprintf(FILE *stream, const char *format, va_list arg) trong Thư viện C chuẩn gửi output đã được định dạng tới một stream bởi sử dụng một danh sách tham số.
Khai báo hàm vfprintf() trong C
Dưới đây là phần khai báo cho hàm vfprintf() trong C:
int vfprintf(FILE *stream, const char *format, va_list arg)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
format − Đây là chuỗi chứa text để được ghi tới Stream. Nó có thể tùy ý chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:
specifier | Kết quả |
---|---|
c | Ký tự |
d hoặc i | Số nguyên hệ thập phân có dấu |
e | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự e |
E | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự E |
f | Số thực dấu chấm động hệ thập phân |
g | Sử dụng rút gọn của %e hoặc %f |
G | Sử dụng rút gọn của %E hoặc %f |
o | Số bát phân có dấu |
s | Chuỗi ký tự |
u | Số nguyên hệ thập phân không dấu |
x | Số nguyên hệ thập lục phân không dấu |
X | Số nguyên hệ thập lục phân không dấu (các chữ cái hoa) |
p | Địa chỉ con trỏ |
n | Không in cái gì |
% | Ký tự |
flags | Miêu tả |
---|---|
- | Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định |
+ | Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu - |
(space) | Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị |
# | Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ |
0 | Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống |
width | Miêu tả |
---|---|
(number) | Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn |
* | Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
.precision | Miêu tả |
---|---|
.number | Với các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử |
.* | Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
length | Miêu tả |
---|---|
h | Tham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X) |
l | Tham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s |
L | Tham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G) |
Các tham số bổ sung − Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.
Trả về giá trị
Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về, nếu không sẽ trả về một số âm.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm vfprintf() trong C:
#include <stdio.h> #include <stdarg.h> void WriteFrmtd(FILE *stream, char *format, ...) { va_list args; va_start(args, format); vfprintf(stream, format, args); va_end(args); } int main () { FILE *fp; fp = fopen("baitapc.txt","w"); WriteFrmtd(fp, "Diem %d cho chat luong \n", 10); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ mở baitapc.txt để ghi vào thư mục hiện tại và sẽ ghi nội dung sau:
Bây giờ theo dõi nội dung file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả sau:
Hàm int vsprintf(char *str, const char *format, va_list arg) trong Thư viện C chuẩn 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ố.
Khai báo hàm vsprintf() trong C
Dưới đây là phần khai báo cho hàm vsprintf() trong C:
int vsprintf(char *str, const char *format, va_list arg)
Tham số
str − Đây là mảng các phần tử char nơi chuỗi kết quả được lưu trữ.
format − Đây là chuỗi chứa text để được ghi tới str. Nó có thể tùy ý chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:
specifier | Kết quả |
---|---|
c | Ký tự |
d hoặc i | Số nguyên hệ thập phân có dấu |
e | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự e |
E | Ký hiệu khoa học (mantissa/exponent) sử dụng ký tự E |
f | Số thực dấu chấm động hệ thập phân |
g | Sử dụng rút gọn của %e hoặc %f |
G | Sử dụng rút gọn của %E hoặc %f |
o | Số bát phân có dấu |
s | Chuỗi ký tự |
u | Số nguyên hệ thập phân không dấu |
x | Số nguyên hệ thập lục phân không dấu |
X | Số nguyên hệ thập lục phân không dấu (các chữ cái hoa) |
p | Địa chỉ con trỏ |
n | Không in cái gì |
% | Ký tự |
flags | Miêu tả |
---|---|
- | Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định |
+ | Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu - |
(space) | Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị |
# | Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ |
0 | Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống |
width | Miêu tả |
---|---|
(number) | Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn |
* | Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
.precision | Miêu tả |
---|---|
.number | Với các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử |
.* | Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng |
length | Miêu tả |
---|---|
h | Tham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X) |
l | Tham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s |
L | Tham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G) |
arg − Một đối tượng biểu diễn danh sách tham số biến. Nó nên được khởi tạo bởi va_start macro được định nghĩa trong <stdarg>.
Trả về giá trị
Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về, nếu không sẽ trả về một số âm.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm vsprintf() trong C:
#include <stdio.h> #include <stdarg.h> char buffer[80]; int vspfunc(char *format, ...) { va_list aptr; int ret; va_start(aptr, format); ret = vsprintf(buffer, format, aptr); va_end(aptr); return(ret); } int main() { int i = 5; float f = 27.0; char str[50] = "QTM xin chao cac ban !!!"; vspfunc("%d %f %s", i, f, str); printf("%s\n", buffer); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm int fscanf(FILE *stream, const char *format,...) trong Thư viện C chuẩn đọc input đã được định dạng từ một Stream.
Khai báo hàm fscanf() trong C
Dưới đây là phần khai báo cho hàm fscanf() trong C:
int fscanf(FILE *stream, const char *format, ...)
Tham số
stream − Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream.
format − Đây là chuỗi mà chứa một hoặc nhiều mục sau: ký tự Whitespace, ký tự Non-whitespace và Format specifier. Một format specifier sẽ là dạng [=%[*][width][modifiers]type=], được giải thích như sau:
Tham số | Miêu tả |
---|---|
* | Đây là một dấu hoa thị bắt đầu (tùy ý) để chỉ rằng dữ liệu là được đọc từ Stream nhưng bị bỏ qua, ví dụ: nó không được lưu trữ trong tham số tương ứng |
width | Xác định số ký tự tối đa được đọc trong hoạt động đọc hiện tại |
modifiers | Xác định một kích cỡ khác với int (trong trường hợp d, I và n), unsigned int (trong trường hợp o,u và x) hoặc float (trong trường hợp e, f và g) cho dữ liệu được trỏ bởi tham số bổ sung tương ứng: h cho short int (cho d, i và n), hoặc unsigned short int (cho o, u và x); l cho long int (cho d, i và n), hoặc unsigned long int (cho o, u và x), hoặc double (cho e, f và g); L cho long double (cho e, f và g) |
type | Một ký tự xác định kiểu dữ liệu được đọc và cách nó được mong đợi được đọc. Bạn theo dõi bảng tiếp theo |
Type specifier cho hàm fscanf
Kiểu | Input | Kiểu tham số |
---|---|---|
c | Ký tự đơn: Đọc ký tự kế tiếp. Nếu một độ rộng khác 1 được xác định, thì hàm này đọc độ rộng các ký tự và lưu trữ chúng trong các vị trí liên tiếp nhau của mảng đã được truyền như là tham số. Không có ký tự null nào được phụ thêm vào cuối | char * |
d | Số nguyên hệ thập phân: Số này tùy ý được đặt trước bởi một dấu + hoặc - | int * |
e, E, f, g, G | Số thực dấu chấm động: Số thập phân chứa một dấu thập phân, được đặt trước tùy ý bởi một dấu + hoặc – và được theo sau tùy ý bởi ký tự e hoặc E và một số thập phân. Hai ví dụ hợp lệ là -732.103 và 7.12e4 | float * |
o | Số nguyên hệ bát phân | int * |
s | Chuỗi ký tự. Nó sẽ đọc các ký tự liên tiếp nhau tới khi tìm thấy một whitespace (có thể là blank, newline (dòng mới) và tab) | char * |
u | Số nguyên hệ thập phân không dấu | unsigned int * |
x, X | Số nguyên hệ thập lục phân | int * |
Các tham số bổ sung -- Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.
Trả về giá trị
Hàm này trả về số mục đầu vào được kết nối và gán thành công hoặc 0 nếu kết nối thất bại.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fscanf() trong C:
#include <stdio.h> #include <stdlib.h> int main() { char str1[10], str2[10], str3[10]; int year; FILE * fp; fp = fopen ("baitapc.txt", "w+"); fputs("Toi sinh nam 2016", fp); rewind(fp); fscanf(fp, "%s %s %s %d", str1, str2, str3, &year); printf("Doc chuoi 1: |%s|\n", str1 ); printf("Doc chuoi 2: |%s|\n", str2 ); printf("Doc chuoi 3: |%s|\n", str3 ); printf("Doc so nguyen: |%d|\n", year ); fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int scanf(const char *format,...) trong Thư viện C chuẩn đọc input đã được định dạng từ stdin.
Hàm scanf không chấp nhận khoảng trống giữa hai chuỗi (khác với hàm gets()), tức là bạn chỉ có thể nhập một chuỗi liền nhau, nếu bạn nhập cả phần khoảng trống thì phần nội dung sau khoảng trống đầu tiên sẽ không được chấp nhận.
Khai báo hàm scanf() trong C
Dưới đây là phần khai báo cho hàm scanf() trong C:
int scanf(const char *format, ...)
Tham số
format -- Đây là chuỗi chứa một trong các item sau:
Ký tự Whitespace, ký tự Non-whitespace và Format specifier. Một format specifier sẽ là dạng [=%[*][width][modifiers]type=], được giải thích như sau:
Tham số | Miêu tả |
---|---|
* | Đây là một dấu hoa thị bắt đầu (tùy ý) để chỉ rằng dữ liệu là được đọc từ Stream nhưng bị bỏ qua, ví dụ: nó không được lưu trữ trong tham số tương ứng |
width | Xác định số ký tự tối đa được đọc trong hoạt động đọc hiện tại |
modifiers | Xác định một kích cỡ khác với int (trong trường hợp d, I và n), unsigned int (trong trường hợp o,u và x) hoặc float (trong trường hợp e, f và g) cho dữ liệu được trỏ bởi tham số bổ sung tương ứng: h cho short int (cho d, i và n), hoặc unsigned short int (cho o, u và x); l cho long int (cho d, i và n), hoặc unsigned long int (cho o, u và x), hoặc double (cho e, f và g); L cho long double (cho e, f và g) |
type | Một ký tự xác định kiểu dữ liệu được đọc và cách nó được mong đợi được đọc. Bạn theo dõi bảng tiếp theo |
Type specifier cho hàm fscanf
Kiểu | Input | Kiểu tham số |
---|---|---|
c | Ký tự đơn: Đọc ký tự kế tiếp. Nếu một độ rộng khác 1 được xác định, thì hàm này đọc độ rộng các ký tự và lưu trữ chúng trong các vị trí liên tiếp nhau của mảng đã được truyền như là tham số. Không có ký tự null nào được phụ thêm vào cuối | char * |
d | Số nguyên hệ thập phân: Số này tùy ý được đặt trước bởi một dấu + hoặc - | int * |
e, E, f, g, G | Số thực dấu chấm động: Số thập phân chứa một dấu thập phân, được đặt trước tùy ý bởi một dấu + hoặc – và được theo sau tùy ý bởi ký tự e hoặc E và một số thập phân. Hai ví dụ hợp lệ là -732.103 và 7.12e4 | float * |
o | Số nguyên hệ bát phân | int * |
s | Chuỗi ký tự. Nó sẽ đọc các ký tự liên tiếp nhau tới khi tìm thấy một whitespace (có thể là blank, newline (dòng mới) và tab) | char * |
u | Số nguyên hệ thập phân không dấu | unsigned int * |
x, X | Số nguyên hệ thập lục phân | int * |
Các tham số bổ sung -- Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.
Trả về giá trị
Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về, nếu thất bại thì trả về một số âm.
Ví dụ
Trong ví dụ sau, mình có nhập khoảng trống trong phần số điện thoại và ngày sinh, và bạn theo dõi phần hiển thị kết quả để thấy rằng lệnh scanf không chấp nhận khoảng trống.
Chương trình C sau minh họa cách sử dụng của hàm scanf() trong C:
#include <stdio.h> int main() { char str1[20], str2[30]; printf("Nhap ten: "); scanf("%s", &str1); printf("Nhap so dien thoai va ngay sinh: "); scanf("%s", &str2); printf("Ten vua nhap: %s\n", str1); printf("So dien thoai va ngay sinh vua nhap: %s", str2); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int sscanf(const char *str, const char *format,...) trong Thư viện C chuẩn đọc input đã được định dạng từ một chuỗi string.
Khai báo hàm sscanf() trong C
Dưới đây là phần khai báo cho hàm sscanf() trong C:
int sscanf(const char *str, const char *format, ...)
Tham số
str -- Đây là chuỗi mà hàm xử lý nó như là source của nó để thu lấy dữ liệu.
format -- Đây là chuỗi chứa một trong các item sau: Ký tự Whitespace, ký tự Non-whitespace và Format specifier
Một format specifier sẽ là dạng: [=%[*][width][modifiers]type=]
Tham số | Miêu tả |
---|---|
* | Đây là một dấu hoa thị bắt đầu (tùy ý) để chỉ rằng dữ liệu là được đọc từ Stream nhưng bị bỏ qua, ví dụ: nó không được lưu trữ trong tham số tương ứng |
width | Xác định số ký tự tối đa được đọc trong hoạt động đọc hiện tại |
modifiers | Xác định một kích cỡ khác với int (trong trường hợp d, I và n), unsigned int (trong trường hợp o,u và x) hoặc float (trong trường hợp e, f và g) cho dữ liệu được trỏ bởi tham số bổ sung tương ứng: h cho short int (cho d, i và n), hoặc unsigned short int (cho o, u và x); l cho long int (cho d, i và n), hoặc unsigned long int (cho o, u và x), hoặc double (cho e, f và g); L cho long double (cho e, f và g) |
type | Một ký tự xác định kiểu dữ liệu được đọc và cách nó được mong đợi được đọc. Bạn theo dõi bảng tiếp theo |
Type specifier cho hàm fscanf
Kiểu | Input | Kiểu tham số |
---|---|---|
c | Ký tự đơn: Đọc ký tự kế tiếp. Nếu một độ rộng khác 1 được xác định, thì hàm này đọc độ rộng các ký tự và lưu trữ chúng trong các vị trí liên tiếp nhau của mảng đã được truyền như là tham số. Không có ký tự null nào được phụ thêm vào cuối | char * |
d | Số nguyên hệ thập phân: Số này tùy ý được đặt trước bởi một dấu + hoặc - | int * |
e, E, f, g, G | Số thực dấu chấm động: Số thập phân chứa một dấu thập phân, được đặt trước tùy ý bởi một dấu + hoặc – và được theo sau tùy ý bởi ký tự e hoặc E và một số thập phân. Hai ví dụ hợp lệ là -732.103 và 7.12e4 | float * |
o | Số nguyên hệ bát phân | int * |
s | Chuỗi ký tự. Nó sẽ đọc các ký tự liên tiếp nhau tới khi tìm thấy một whitespace (có thể là blank, newline (dòng mới) và tab) | char * |
u | Số nguyên hệ thập phân không dấu | unsigned int * |
x, X | Số nguyên hệ thập lục phân | int * |
Các tham số khác -- Hàm này mong đợi một dãy con trỏ như là các tham số bổ sung, mỗi con trỏ chỉ tới một đối tượng có kiểu được xác định bởi %-tag tương ứng của chúng bên trong chuỗi định dạng format, trong cùng thứ tự.
Với mỗi format specifier trong chuỗi định dạng format mà thu nhận dữ liệu, một tham số bổ sung được xác định. Nếu bạn muốn lưu trữ kết quả của một hoạt động sscanf trên một biến thông thường, bạn nên đặt trước định danh identifier của nó với các toán tử tham chiếu, ví dụ: một dấu và (&), giống như: int n; sscanf (str,"%d",&n);
Trả về giá trị
Nếu thành công, hàm trả về số biến được điền. Trong trường hợp có một đầu vào thất bại tước khi bất cứ dữ liệu nào được đọc thành công, hàm trả về EOF.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm sscanf() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int day, year; char weekday[20], month[20], dtm[100]; strcpy( dtm, "Tuesday July 12 2016" ); sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year ); printf("%s %d, %d = %s\n", month, day, year, weekday ); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int fgetc(FILE *stream) trong Thư viện C chuẩn lấy ký tự kế tiếp (một unsigned char) từ Stream đã cho và tăng position indicator cho Stream đó.
Khai báo hàm fgetc() trong C
Dưới đây là phần khai báo cho hàm fgetc() trong C:
int fgetc(FILE *stream)
Tham số
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream trên đó hoạt động được thực hiện.
Trả về giá trị
Hàm này trả về ký tự được đọc dưới dạng một unsigned char được ép kiểu thành một int hoặc EOF hoặc lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fgetc() trong C:
#include <stdio.h> int main () { FILE *fp; int c; int n = 0; fp = fopen("baitapc.txt","r"); if(fp == NULL) { perror("Xay ra loi khi mo baitapc.txt !!!"); return(-1); } do { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); }while(1); fclose(fp); return(0); }
Giả sử chúng ta có baitapc.txt với nội dung sau. File này sẽ được sử dụng như là input cho chương trình C ví dụ:
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm char *fgets(char *str, int n, FILE *stream) trong Thư viện C chuẩn đọ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.
Khai báo hàm fgets() trong C
Dưới đây là phần khai báo cho hàm fgets() trong C:
char *fgets(char *str, int n, FILE *stream)
Tham số
str -- Đây là con trỏ tới một mảng các char nơi chuỗi được đọc được lưu trữ.
n -- Đây là số ký tự tối đa được đọc (bao gồm ký tự null cuối cùng). Thường thì độ dài của mảng đã truyền là str được sử dụng.
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, nơi mà các ký tự được đọc từ đó.
Trả về giá trị
Nếu thành công, hàm trả về cùng tham số str. Nếu bắt gặp EOF và không có ký tự nào đã được đọc, nội dung của str vẫn không thay đổi và một con trỏ null được trả về.
Nếu một lỗi xuất hiện, một con trỏ null được trả về.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fgets() trong C:
#include <stdio.h> int main() { FILE *fp; char str[60]; /* mo file de doc */ fp = fopen("baitapc.txt" , "r"); if(fp == NULL) { perror("Xay ra loi trong khi doc file"); return(-1); } if( fgets (str, 60, fp)!=NULL ) { /* Ghi noi dung len stdout */ puts(str); } fclose(fp); return(0); }
Giả sử chúng ta có baitapc.txt với nội dung sau. File này sẽ được sử dụng như là input cho chương trình C ví dụ:
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int fputc(int char, FILE *stream) trong Thư viện C chuẩn 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.
Khai báo hàm fputc() trong C
Dưới đây là phần khai báo cho hàm fputc() trong C:
int fputc(int char, FILE *stream)
Tham số
char -- Đây là ký tự được ghi.
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, nơi mà các ký tự được ghi.
Trả về giá trị
Nếu không có lỗi, cùng ký tự đã được ghi sẽ được trả về. Nếu một lỗi xuất hiện, EOF được trả về và Error Indicator được thiết lập.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fputc() trong C:
#include <stdio.h> int main () { FILE *fp; int ch; fp = fopen("baitapc.txt", "w+"); for( ch = 33 ; ch <= 100; ch++ ) { fputc(ch, fp); } fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo một baitapc.txt trong thư mục hiện tại, và sẽ có nội dung sau:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd
Bây giờ theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ cho kết quả:
Hàm int fputs(const char *str, FILE *stream) trong Thư viện C chuẩn ghi một chuỗi tới Stream đã xác định (không ghi ký tự null).
Khai báo hàm fputs() trong C
Dưới đây là phần khai báo cho hàm fputs() trong C:
int fputs(const char *str, FILE *stream)
Tham số
str -- Đây là một mảng chứa dãy ký tự kết thúc với null được ghi.
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, nơi chuỗi được ghi.
Trả về giá trị
Hàm này trả về một giá trị không âm, hoặc trả về EOF nếu có lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm fputs() trong C:
#include <stdio.h> int main () { FILE *fp; fp = fopen("baitapc.txt", "w+"); fputs("Hoc c co ban va nang cao tai QTM.", fp); fputs("Loat bai thu vien C chuan.", fp); fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo một baitapc.txt trong thư mục hiện tại.
Bây giờ theo dõi nội dung của file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình trên để xem kết quả.
Hàm int getc(FILE *stream) trong Thư viện C chuẩn lấy ký tự kế tiếp (một unsigned char) từ Stream đã cho và tăng position indicator cho Stream đó.
Khai báo hàm getc() trong C
Dưới đây là phần khai báo cho hàm getc() trong C:
int getc(FILE *stream)
Tham số
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, trên đó hoạt động được thực hiện.
Trả về giá trị
Hàm này trả về ký tự được đọc dưới dạng một unsigned char được ép kiểu thành một int hoặc EOF hoặc lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm getc() trong C:
#include<stdio.h> int main() { char c; printf("Nhap ky tu: "); c = getc(stdin); printf("Hien thi ky tu vua nhap: "); putc(c, stdout); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int getchar(void) trong Thư viện C chuẩn lấy một ký tự (một unsigned char) từ stdin. Hàm này tương đương hàm getc với tham số là stdin.
Khai báo hàm getchar() trong C
Dưới đây là phần khai báo cho hàm getchar() trong C:
int getchar(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ề ký tự được đọc dưới dạng một unsigned char được ép kiểu thành một int hoặc EOF hoặc lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm getchar() trong C:
#include <stdio.h> int main () { char c; printf("Nhap ky tu: "); c = getchar(); printf("Ky tu vua nhap: "); putchar(c); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int putc(int char, FILE *stream) trong Thư viện C chuẩn 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 đó.
Khai báo hàm putc() trong C
Dưới đây là phần khai báo cho hàm putc() trong C:
int putc(int char, FILE *stream)
Tham số
char -- Đây là ký tự được ghi.
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Stream, nơi ký tự được ghi.
Trả về giá trị
Hàm này trả về ký tự được đọc dưới dạng một unsigned char được ép kiểu thành một int hoặc EOF hoặc lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm putc() trong C:
#include <stdio.h> int main () { FILE *fp; int ch; fp = fopen("baitapc.txt", "w"); for( ch = 33 ; ch <= 100; ch++ ) { putc(ch, fp); } fclose(fp); return(0); }
Biên dịch và chạy chương trình trên sẽ tạo một baitapc.txt trong thư mục hiện tại và có nội dung sau:
Bây giờ theo dõi nội dung file trên bởi sử dụng chương trình C sau:
#include <stdio.h> int main () { FILE *fp; int c; fp = fopen("baitapc.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int putchar(int char) trong Thư viện C chuẩn Ghi một ký tự (một unsigned char) đã được xác định bởi tham số char tới stdout.
Khai báo hàm putchar() trong C
Dưới đây là phần khai báo cho hàm putchar() trong C:
int putchar(int char)
Tham số
char -- Đây là ký tự được ghi.
Trả về giá trị
Hàm này trả về ký tự được đọc dưới dạng một unsigned char được ép kiểu thành một int hoặc EOF hoặc lỗi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm putchar() trong C:
#include <stdio.h> int main () { char ch; for(ch = 'A' ; ch <= 'Z' ; ch++) { putchar(ch); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm int puts(const char *str) trong Thư viện C chuẩn 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.
Khai báo hàm puts() trong C
Dưới đây là phần khai báo cho hàm puts() trong C:
int puts(const char *str)
Tham số
str -- Đây là chuỗi để được ghi.
Trả về giá trị
Nếu thành công, hàm này trả về giá trị không âm. Nếu có lỗi, hàm trả về EOF.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm puts() trong C:
#include <stdio.h> #include <string.h> int main() { char str1[15]; char str2[15]; strcpy(str1, "QTMteam"); strcpy(str2, "xinchaocacban"); puts(str1); puts(str2); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm int ungetc(int char, FILE *stream) trong Thư viện C chuẩn đẩy ký tự char (là một unsigned char) lên trên Stream đã cho để mà ký tự kế tiếp được đọc.
Khai báo hàm ungetc() trong C
Dưới đây là phần khai báo cho hàm ungetc() trong C:
int ungetc(int char, FILE *stream)
Tham số
char -- Đây là ký tự để được đẩy về sau.
stream -- Đây là con trỏ tới một đối tượng FILE mà nhận diện Input Stream.
Trả về giá trị
Nếu thành công, nó trả về ký tự mà đã được đẩy về sau. Nếu không hàm trả về EOF và Stream vẫn không thay đổi.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm ungetc() trong C:
#include <stdio.h> int main () { FILE *fp; int c; char buffer [256]; fp = fopen("baitapc.txt", "r"); if( fp == NULL ) { perror("Xuat hien loi trong khi mo baitapc.txt"); return(-1); } while(!feof(fp)) { c = getc (fp); /* thay the ky tu ! boi ky tu + */ if( c == '!' ) { ungetc ('+', fp); } else { ungetc(c, fp); } fgets(buffer, 255, fp); fputs(buffer, stdout); } return(0); }
Giả sử chúng ta có baitapc.txt chứa dữ liệu sau. File này sẽ được sử dụng như là input.
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm void perror(const char *str) trong Thư viện C chuẩn 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.
Khai báo hàm perror() trong C
Dưới đây là phần khai báo cho hàm perror() trong C:
void perror(const char *str)
Tham số
str -- Đây là chuỗi chứa một thông điệp tùy biến (Custom message) để được in trước khi có thông báo lỗi.
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 perror() trong C:
#include <stdio.h> int main () { FILE *fp; /* Doi ten file */ rename("baitapc.txt", "newbaitapc.txt"); /* bay gio thu co gang mo baitapc.txt */ fp = fopen("baitapc.txt", "r"); if( fp == NULL ) { perror("Error: "); return(-1); } fclose(fp); return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả: (bởi vì chúng ta đang cố gắng mở một file không tồn tại)
Hàm double atof(const char *str) trong Thư viện C chuẩn 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).
Khai báo hàm atof() trong C
Dưới đây là phần khai báo cho hàm atof() trong C:
double atof(const char *str)
Tham số
str -- Đây là một chuỗi có biểu diễn của một số thực dấu chấm động.
Trả về giá trị
Hàm này trả về số thực dấu chấm động đã được chuyển đổi dưới dạng một giá trị double. Nếu không có sự chuyển đổi nào hợp lệ được thực hiện, nó trả về 0.0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm atof() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { float val; char str[20]; strcpy(str, "98993489"); val = atof(str); printf("Gia tri duoi dang chuoi = %s, \nGia tri duoi dang so thuc = %f\n", str, val); strcpy(str, "QTM.com"); val = atof(str); printf("\nGia tri duoi dang chuoi = %s, \nGia tri duoi dang so thuc = %f\n", str, val); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm int atoi(const char *str) trong Thư viện C chuẩn 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).
Khai báo hàm atoi() trong C
Dưới đây là phần khai báo cho hàm atoi() trong C:
int atoi(const char *str)
Tham số
str -- Đây là chuỗi biểu diễn một số nguyên.
Trả về giá trị
Hàm này trả về số nguyên đã được chuyển đổi dưới dạng một giá trị int. Nếu không có sự chuyển đổi hợp lệ nào được thực hiện, 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 atoi() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int val; char str[20]; strcpy(str, "98993489"); val = atoi(str); printf("Gia tri duoi dang chuoi = %s, \nGia tri duoi dang so nguyen = %d\n", str, val); strcpy(str, "QTM.com"); val = atoi(str); printf("\nGia tri duoi dang chuoi = %s, \nGia tri duoi dang so nguyen = %d\n", str, val); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm long int atol(const char *str) trong Thư viện C chuẩn chuyển đổi một chuỗi được trỏ tới bởi tham số str thành một số long int.
Khai báo hàm atol() trong C
Dưới đây là phần khai báo cho hàm atol() trong C:
long int atol(const char *str)
Tham số
str -- Đây là chuỗi biểu diễn một số nguyên.
Trả về giá trị
Hàm này trả về số nguyên đã được chuyển đổi dưới dạng một giá trị long int. Nếu không có sự chuyển đổi hợp lệ nào được thực hiện, 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 atol() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { long val; char str[20]; strcpy(str, "98993489"); val = atol(str); printf("Gia tri duoi dang chuoi = %s, \nGia tri duoi dang long int = %ld\n", str, val); strcpy(str, "QTM.com"); val = atol(str); printf("\nGia tri duoi dang chuoi = %s, \nGia tri duoi dang long int = %ld\n", str, val); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm double strtod(const char *str, char **endptr) trong Thư viện C chuẩn 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). Nếu endptr không là NULL, một con trỏ tới ký tự sau ký tự cuối cùng được sử dụng trong sự chuyển đổi được lưu trữ trong vị trí được tham chiếu bởi endptr.
Khai báo hàm strtod() trong C
Dưới đây là phần khai báo cho hàm strtod() trong C:
double strtod(const char *str, char **endptr)
Tham số
str -- Đây là giá trị để được chuyển đổi thành một chuỗi.
endptr -- Đây là tham chiếu tới một đối tượng đã được cấp phát của kiểu char*, có giá trị được thiết lập bởi hàm tới ký tự kế tiếp trong str sau giá trị số.
Trả về giá trị
Hàm này trả về số thực dấu chấm động đã được chuyển đổi dưới dạng một giá trị double. Nếu không, hàm trả về 0.0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm strtod() trong C:
#include <stdio.h> #include <stdlib.h> int main() { char str[30] = "21.32301 Hoc C tai QTM"; char *ptr; double ret; ret = strtod(str, &ptr); printf("Phan gia tri (double) la: %lf\n", ret); printf("Phan chuoi la: |%s|", ptr); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm long int strtol(const char *str, char **endptr, int base) trong Thư viện C chuẩn chuyển đổi một phần của chuỗi ban đầu trong str thành một giá trị long int tương ứng với cơ số base đã cho, mà phải là 2, 8, …, 36, hoặc là giá trị đặc biệt 0.
Khai báo hàm strtol() trong C
Dưới đây là phần khai báo cho hàm strtol() trong C:
long int strtol(const char *str, char **endptr, int base)
Tham số
str -- Đây là chuỗi biểu diễn một số nguyên.
endptr -- Đây là tham chiếu tới một đối tượng đã được cấp phát của kiểu char*, có giá trị được thiết lập bởi hàm tới ký tự kế tiếp trong str sau giá trị số.
base -- Đây là cơ số, phải là 2, 8,…, 36, hoặc là giá trị đặc biệt 0.
Trả về giá trị
Hàm này trả về số nguyên đã được chuyển đổi dưới dạng một giá trị long int. Nếu không thì hàm trả về giá trị 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm strtol() trong C:
#include <stdio.h> #include <stdlib.h> int main() { char str[30] = "21.32301 Hoc C tai QTM"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("Phan gia tri so (unsigned long int) la: %ld\n", ret); printf("Phan chuoi la: |%s|", ptr); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm unsigned long int strtoul(const char *str, char **endptr, int base) trong Thư viện C chuẩn chuyển đổi một phần của chuỗi ban đầu trong str thành một giá trị long int tương ứng với cơ số base đã cho, có thể là 2, 8,…, 36, hoặc là giá trị đặc biệt 0.
Khai báo hàm strtoul() trong C
Dưới đây là phần khai báo cho hàm strtoul() trong C:
unsigned long int strtoul(const char *str, char **endptr, int base)
Tham số
str -- Đây là chuỗi biểu diễn một số nguyên.
endptr -- Đây là tham chiếu tới một đối tượng đã được cấp phát của kiểu char*, có giá trị được thiết lập bởi hàm tới ký tự kế tiếp trong str sau giá trị số.
base -- Đây là cơ số, phải là 2, 8, …, 36, hoặc là giá trị đặc biệt 0.
Trả về giá trị
Hàm này trả về số nguyên đã được chuyển đổi dưới dạng một giá trị long int. Nếu không thì hàm trả về giá trị 0.
Ví dụ
Chương trình C sau minh họa cách sử dụng của hàm strtoul() trong C:
#include <stdio.h> #include <stdlib.h> int main() { char str[30] = "21.32301 Hoc C tai QTM"; char *ptr; long ret; ret = strtoul(str, &ptr, 10); printf("Phan gia tri (unsigned long int) la: %lu\n", ret); printf("Phan gia tri chuoi la |%s|", ptr); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm void *calloc(so-phan-tu, kich-co-phan-tu) cấp phát bộ nhớ được yêu cầu và trả về một con trỏ tới nó. Điểm khác nhau giữa malloc và calloc là: malloc không thiết lập bộ nhớ về 0 trong khi calloc thiết lập bộ nhớ đã cấp phát về 0.
Khai báo hàm calloc() trong C
Dưới đây là phần khai báo cho calloc() trong C:
void *calloc(so-phan-tu, kich-co-phan-tu)
Tham số
so-phan-tu: Đây là số phần tử để được cấp phát.
kich-co-phan-tu: Đây là kích cỡ của phần tử.
Trả về giá trị
Hàm này trả về một con trỏ tới bộ nhớ đã cấp phát, hoặc trả về NULL nếu yêu cầu thất bại.
Ví dụ
Chương trình C sau minh họa cách sử dụng của calloc() trong C:
#include <stdio.h> #include <stdlib.h> int main() { int i, n; int *a; printf("Nhap so phan tu: \n"); scanf("%d",&n); a = (int*)calloc(n, sizeof(int)); printf("Nhap %d so: \n",n); for( i=0 ; i < n ; i++ ) { scanf("%d",&a[i]); } printf("Cac so vua nhap la: \n"); for( i=0 ; i < n ; i++ ) { printf("%d ",a[i]); } return(0); }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Hàm void free(void *ptr) 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
Khai báo hàm free() trong C
Dưới đây là phần khai báo cho free() trong C:
void free(void *ptr)
Tham số
ptr: Đây là con trỏ tới khối bộ nhớ đã được cấp phát trước đó với malloc, calloc hoặc realloc để được giải phóng. Nếu tham số truyền vào là một con trỏ null, thì không hành động nào diễn ra.
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 free() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str; /* lan cap phat bo nho ban bau */ str = (char *) malloc(15); strcpy(str, "QTMTeam"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); /* tai cap phat lai bo nho */ str = (char *) realloc(str, 25); strcat(str, ".@gmail.com"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); /* Giai phong bo nho da cap phat */ free(str); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm malloc() cấp phát bộ nhớ được yêu cầu và trả về một con trỏ tới nó.
Khai báo hàm malloc() trong C
Dưới đây là phần khai báo cho malloc() trong C:
void *malloc(kich-co)
Tham số
kich-co: Đây là kích cỡ của khối bộ nhớ (bằng byte).
Trả về giá trị
Hàm này trả về một con trỏ tới bộ nhớ đã cấp phát, hoặc trả về NULL nếu yêu cầu thất bại.
Ví dụ
Chương trình C sau minh họa cách sử dụng của malloc() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str; /* lan cap phat bo nho ban bau */ str = (char *) malloc(15); strcpy(str, "QTMTeam"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); /* tai cap phat lai bo nho */ str = (char *) realloc(str, 25); strcat(str, ".@gmail.com"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); free(str); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
Hàm realloc() cố gắng để phục hồi khối bộ nhớ được trỏ tới bởi con trỏ ptr mà đã được cấp phát trước đó với một lời gọi tới malloc hoặc calloc.
Khai báo hàm realloc() trong C
Dưới đây là phần khai báo cho realloc() trong C:
void *realloc(void *ptr, kich-co)
Tham số
ptr: Đây là con trỏ tới khối bộ nhớ đã được cấp phát trước đó với malloc, calloc hoặc realloc để được tái cấp phát. Nếu giá trị là NULL, thì một khối mới được cấp phát và một con trỏ tới nó được trả về bởi hàm này.
kich-co: Đây là kích cỡ mới cho khối bộ nhớ. Nếu giá trị là 0 và con trỏ ptr trỏ tới một khối nhớ đang tồn tại, khối nhớ được trỏ tới bởi ptr được giải phóng và một con trỏ NULL được trả về.
Trả về giá trị
Hàm này trả về một con trỏ tới bộ nhớ được cấp phát mới, hoặc trả về NULL nếu yêu cầu thất bại.
Ví dụ
Chương trình C sau minh họa cách sử dụng của realloc() trong C:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str; /* lan cap phat bo nho ban bau */ str = (char *) malloc(15); strcpy(str, "QTM"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); /* tai cap phat lai bo nho */ str = (char *) realloc(str, 25); strcat(str, "@gmail.com"); printf("Chuoi = %s, tai Dia chi = %u\n", str, str); free(str); return(0); }
Biên dịch và chạy chương trình C trên để xem kết quả.
0 Nhận xét