C语言教程 第13页
C 库函数 – qsort() C 标准库 – <stdlib.h> 描述 C 库函数 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 对数组进行排序。 声明 下面是 qsort() 函数的声明。 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参数 base — 指向要排序的数组的第一个元素的指针。 nitems — 由 base 指向的数组中元素的个数。 size — 数组中每个元素的大小,以字节为单位。 compar — 用来比较两个元素的函数。 返回值 该函数不返回任何值。 实例 下面的实例演示了 qsort() 函数的用法。 #include <stdio.h> #include <stdlib.h> int values[] = { 88, 56, 100, 2, 25 }; int cmpfunc (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int main() { int n; printf("排序之前的列表:\n"); for( n = 0 ; n < 5; n++ ) { printf("%d ", values[n]); } qsort(values, 5, sizeof(int), cmpfunc);...
C 库函数 – wcstombs() C 标准库 – <stdlib.h> 描述 C 库函数 size_t wcstombs(char *str, const wchar_t *pwcs, size_t n) 把宽字符字符串 pwcs 转换为一个 str 开始的多字节字符串。最多会有 n 个字节被写入 str 中。 声明 下面是 wcstombs() 函数的声明。 size_t wcstombs(char *str, const wchar_t *pwcs, size_t n) 参数 str — 指向一个 char 元素的数组,至少有 n 字节长。 pwcs — 要被转换的宽字符字符串。 n — 要被写入到 str 中的最大字节数。 返回值 该函数返回转换和写入到 str 中的字节数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。 实例 下面的实例演示了 wcstombs() 函数的用法。 #include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 50 int main() { size_t ret; char *MB = (char *)malloc( BUFFER_SIZE ); wchar_t *WC = L"http://www.w3cschool.cn"; /* 转换宽字符字符串 */ ret = wcstombs(MB, WC, BUFFER_SIZE); printf("要转换的字符数 = %u\n", ret); printf("多字节字符 = %s\n\n", MB); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 要转换的字符数 = 23 多字节字符 = http://www.w3cschool.cn C 标准库 – <stdlib.h>
C 库函数 – strtol() C 标准库 – <stdlib.h> 描述 C 库函数 long int strtol(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。 声明 下面是 strtol() 函数的声明。 long int strtol(const char *str, char **endptr, int base) 参数 str — 要转换为长整数的字符串。 endptr — 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。 base — 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。 返回值 该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。 实例 下面的实例演示了 strtol() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { char str[30] = "2030300 This is test"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("数字(无符号长整数)是 %ld\n", ret); printf("字符串部分是 |%s|", ptr); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 数字(无符号长整数)是 2030300 字符串部分是 | This is test| C 标准库 – <stdlib.h>
C 库函数 – system() C 标准库 – <stdlib.h> 描述 C 库函数 int system(const char *command) 把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并在命令完成后返回。 声明 下面是 system() 函数的声明。 int system(const char *command) 参数 command — 包含被请求变量名称的 C 字符串。 返回值 如果发生错误,则返回值为 -1,否则返回命令的状态。 实例 下面的实例演示了 system() 函数的用法,列出了 unix 机上当前目录下所有的文件和目录。 #include <stdio.h> #include <string.h> int main () { char command[50]; strcpy( command, "ls -l" ); system(command); return(0); } 让我们编译并运行上面的程序,在 unix 机上将产生以下结果: drwxr-xr-x 2 apache apache 4096 Aug 22 07:25 hsperfdata_apache drwxr-xr-x 2 railo railo 4096 Aug 21 18:48 hsperfdata_railo rw------ 1 apache apache 8 Aug 21 18:48 mod_mono_dashboard_XXGLOBAL_1 rw------ 1 apache apache 8 Aug 21 18:48 mod_mono_dashboard_asp_2 srwx---- 1 apache apache 0 Aug 22 05:28 mod_mono_server_asp rw------ 1 apache apache 0 Aug 22 05:28 mod_mono_server_asp_1280495620 srwx---- 1 apache apache...
C 库函数 – mbstowcs() C 标准库 – <stdlib.h> 描述 C 库函数 size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) 把参数 str 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。 声明 下面是 mbstowcs() 函数的声明。 size_t mbstowcs(schar_t *pwcs, const char *str, size_t n) 参数 pwcs — 指向一个 wchar_t 元素的数组,数组长度足以存储一个最大字符长度的宽字符串。 str — 要被转换的多字节字符字符串。 n — 要被转换的最大字符数。 返回值 该函数返回转换的字符数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。 实例 下面的实例演示了 mbstowcs() 函数的用法。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int len; char *pmbnull = NULL; char *pmb = (char *)malloc( MB_CUR_MAX ); wchar_t *pwc = L"Hi"; wchar_t *pwcs = (wchar_t *)malloc( sizeof( wchar_t )); printf("转换为多字节字符串\n"); len = wcstombs( pmb, pwc, MB_CUR_MAX); printf("被转换的字符 %d\n", len); printf("第一个多字节字符的十六进制值:%#.4x\n", pmb); printf("转换回宽字符字符串\n"); len = mbstowcs( pwcs, pmb, MB_CUR_MAX); printf("被转换的字符 %d\n", len); printf("第一个宽字符的十六进制值:%#.4x\n\n", pwcs); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 转换为多字节字符串 被转换的字符 1...
C 库函数 – getc() C 标准库 – <stdio.h> 描述 C 库函数 int getc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。 声明 下面是 getc() 函数的声明。 int getc(FILE *stream) 参数 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。 返回值 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。 实例 下面的实例演示了 getc() 函数的用法。 #include<stdio.h> int main() { char c; printf("请输入字符:"); c = getc(stdin); printf("输入的字符:"); putc(c, stdout); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 请输入字符:a 输入的字符:a C 标准库 – <stdio.h>
C 库函数 – atol() C 标准库 – <stdlib.h> 描述 C 库函数 long int atol(const char *str) 把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。 声明 下面是 atol() 函数的声明。 long int atol(const char *str) 参数 str — 要转换为长整数的字符串。 返回值 该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。 实例 下面的实例演示了 atol() 函数的用法。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { long val; char str[20]; strcpy(str, "98993489"); val = atol(str); printf("字符串值 = %s, 长整型值 = %ld\n", str, val); strcpy(str, "w3cschool.cn"); val = atol(str); printf("字符串值 = %s, 长整型值 = %ld\n", str, val); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 字符串值 = 98993489, 长整型值 = 98993489 字符串值 = w3cschool.cn, 长整型值 = 0 C 标准库 – <stdlib.h>
C 库函数 – getchar() C 标准库 – <stdio.h> 描述 C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。 声明 下面是 getchar() 函数的声明。 int getchar(void) 参数 NA 返回值 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。 实例 下面的实例演示了 getchar() 函数的用法。 #include <stdio.h> int main () { char c; printf("请输入字符:"); c = getchar(); printf("输入的字符:"); putchar(c); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 请输入字符:a 输入的字符:a C 标准库 – <stdio.h>
C 库函数 – strtod() C 标准库 – <stdlib.h> 描述 C 库函数 double strtod(const char *str, char **endptr) 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。如果 endptr 不为空,则指向转换中最后一个字符后的字符的指针会存储在 endptr 引用的位置。 声明 下面是 strtod() 函数的声明。 double strtod(const char *str, char **endptr) 参数 str — 要转换为双精度浮点数的字符串。 endptr — 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。 返回值 该函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。 实例 下面的实例演示了 strtod() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { char str[30] = "20.30300 This is test"; char *ptr; double ret; ret = strtod(str, &ptr); printf("数字(double)是 %lf\n", ret); printf("字符串部分是 |%s|", ptr); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 数字(double)是 20.303000 字符串部分是 | This is test| C 标准库 – <stdlib.h>
C 库函数 – fputc() C 标准库 – <stdio.h> 描述 C 库函数 int fputc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。 声明 下面是 fputc() 函数的声明。 int fputc(int char, FILE *stream) 参数 char — 这是要被写入的字符。该字符以其对应的 int 值进行传递。 stream — 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。 返回值 如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。 实例 下面的实例演示了 fputc() 函数的用法。 #include <stdio.h> int main () { FILE *fp; int ch; fp = fopen("file.txt", "w+"); for( ch = 33 ; ch <= 100; ch++ ) { fputc(ch, fp); } fclose(fp); return(0); } 让我们编译并运行上面的程序,这将在当前目录中创建文件 file.txt,它的内容如下: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd 现在让我们使用下面的程序查看上面文件的内容: #include <stdio.h> int main () { FILE *fp; int c; fp = fopen("file.txt","r"); while(1) { c = fgetc(fp); if( feof(fp) ) { break ; } printf("%c", c); } fclose(fp); return(0); } C 标准库 – <stdio.h>