C语言教程 第12页 C 库函数 – free() C 标准库 – <stdlib.h> 描述 C 库函数 void free(void *ptr) 释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。 声明 下面是 free() 函数的声明。 void free(void *ptr) 参数 ptr — 指针指向一个要释放内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果传递的参数是一个空指针,则不会执行任何动作。 返回值 该函数不返回任何值。 实例 下面的实例演示了 free() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { char *str; /* 最初的内存分配 */ str = (char *) malloc(15); strcpy(str, "w3cschool"); printf("String = %s, Address = %u\n", str, str); /* 重新分配内存 */ str = (char *) realloc(str, 25); strcat(str, ".cn"); printf("String = %s, Address = %u\n", str, str); /* 释放已分配的内存 */ free(str); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: String = w3cschool, Address = 355090448 String = w3cschool.cn, Address = 355090448 C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – abs() C 标准库 – <stdlib.h> 描述 C 库函数 int abs(int x) 返回 x 的绝对值。 声明 下面是 abs() 函数的声明。 int abs(int x) 参数 x — 完整的值。 返回值 该函数返回 x 的绝对值。 实例 下面的实例演示了 abs() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main () { int a, b; a = abs(5); printf("a 的值 = %d\n", a); b = abs(-10); printf("b 的值 = %d\n", b); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: a 的值 = 5 b 的值 = 10 C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – wctomb() C 标准库 – <stdlib.h> 描述 C 库函数 int wctomb(char *str, wchar_t wchar) 把宽字符 wchar 转换为它的多字节表示形式,并把它存储在 str 指向的字符数组的开头。 声明 下面是 wctomb() 函数的声明。 int wctomb(char *str, wchar_t wchar) 参数 str — 一个指针,指向一个足以存储多字节字符的数组。 wchar — 类型为 wchar_t 的宽字符。 返回值 如果 str 不为 NULL,wctomb() 函数返回写入字节数组中的字节数。如果 wchar 不能被表示为一个多字节序列,则会返回 -1。 如果 str 为 NULL,如果编码具有移位状态,则 wctomb() 函数返回非零,如果编码是无状态的,则返回零。 实例 下面的实例演示了 wctomb() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { int i; wchar_t wc = L'a'; char *pmbnull = NULL; char *pmb = (char *)malloc(sizeof( char )); printf("要转换的宽字符:\n"); i = wctomb( pmb, wc ); printf("被转换的字符:%u\n", i); printf("多字节字符:%.1s\n", pmb); printf("当要转换的字符为 NULL 时尝试转换:\n"); i = wctomb( pmbnull, wc ); printf("被转换的字符:%u\n", i); /* 不会输出任何值 */ printf("多字节字符:%.1s\n", pmbnull); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 要转换的宽字符: 被转换的字符:1 多字节字符:a 当要转换的字符为 NULL 时尝试转换: 被转换的字符:0 多字节字符:...
2024-04-03
C 库函数 – malloc() C 标准库 – <stdlib.h> 描述 C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。 声明 下面是 malloc() 函数的声明。 void *malloc(size_t size) 参数 size — 内存块的大小,以字节为单位。 返回值 该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。 实例 下面的实例演示了 malloc() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { char *str; /* 最初的内存分配 */ str = (char *) malloc(15); strcpy(str, "w3cschool"); printf("String = %s, Address = %u\n", str, str); /* 重新分配内存 */ str = (char *) realloc(str, 25); strcat(str, ".cn"); printf("String = %s, Address = %u\n", str, str); free(str); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: String = w3cschool, Address = 355090448 String = w3cschool.cn, Address = 355090448 C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – div() C 标准库 – <stdlib.h> 描述 C 库函数 div_t div(int numer, int denom) 把 numer(分子)除以 denom(分母)。 声明 下面是 div() 函数的声明。 div_t div(int numer, int denom) 参数 numer — 分子。 denom — 分母。 返回值 该函数返回定义在 <cstdlib> 中的结构中的值,该结构有两个成员,如 div_t:int quot; int rem;。 实例 下面的实例演示了 div() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { div_t output; output = div(27, 4); printf("(27/ 4) 的商 = %d\n", output.quot); printf("(27/4) 的余数 = %d\n", output.rem); output = div(27, 3); printf("(27/ 3) 的商 = %d\n", output.quot); printf("(27/3) 的余数 = %d\n", output.rem); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: (27/ 4) 的商 = 6 (27/4) 的余数 = 3 (27/ 3) 的商 = 9 (27/3) 的余数 = 0 C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – memchr() C 标准库 – <string.h> 描述 C 库函数 void *memchr(const void *str, int c, size_t n) 在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。 声明 下面是 memchr() 函数的声明。 void *memchr(const void *str, int c, size_t n) 参数 str — 指向要执行搜索的内存块。 c — 以 int 形式传递的值,但是函数在每次字节搜索时是使用该值的无符号字符形式。 n — 要被分析的字节数。 返回值 该函数返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回 NULL。 实例 下面的实例演示了 memchr() 函数的用法。 #include <stdio.h> #include <string.h> int main () { const char str[] = "http://www.w3cschool.cn"; const char ch = '.'; char *ret; ret = memchr(str, ch, strlen(str)); printf("|%c| 之后的字符串是 - |%s|\n", ch, ret); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: |.| 之后的字符串是 - |.w3cschool.cn| C 标准库 – <string.h>
2024-04-03
C 库函数 – strtoul() C 标准库 – <stdlib.h> 描述 C 库函数 unsigned long int strtoul(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个无符号长整数(类型为 unsigned long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。 声明 下面是 strtoul() 函数的声明。 unsigned long int strtoul(const char *str, char **endptr, int base) 参数 str — 要转换为无符号长整数的字符串。 endptr — 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。 base — 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。 返回值 该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。 实例 下面的实例演示了 strtoul() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { char str[30] = "2030300 This is test"; char *ptr; long ret; ret = strtoul(str, &ptr, 10); printf("数字(无符号长整数)是 %lu\n", ret); printf("字符串部分是 |%s|", ptr); return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 数字(无符号长整数)是 2030300 字符串部分是 | This is test| C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – bsearch() C 标准库 – <stdlib.h> 描述 C 库函数 void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)) 对 nitems 对象的数组执行二分查找,base 指向进行查找的数组,key 指向要查找的元素,size 指定数组中每个元素的大小。 数组的内容应根据 compar 所对应的比较函数升序排序。 声明 下面是 bsearch() 函数的声明。 void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *)) 参数 key — 指向要查找的元素的指针,类型转换为 void*。 base — 指向进行查找的数组的第一个对象的指针,类型转换为 void*。 nitems — base 所指向的数组中元素的个数。 size — 数组中每个元素的大小,以字节为单位。 compar — 用来比较两个元素的函数。 返回值 如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。. 实例 下面的实例演示了 bsearch() 函数的用法。 #include <stdio.h> #include <stdlib.h> int cmpfunc(const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int values[] = { 5, 20, 29, 32, 63 }; int main () {...
2024-04-03
C 库函数 – mbtowc() C 标准库 – <stdlib.h> 描述 C 库函数 int mbtowc(whcar_t *pwc, const char *str, size_t n) 把一个多字节序列转换为一个宽字符。 声明 下面是 mbtowc() 函数的声明。 int mbtowc(whcar_t *pwc, const char *str, size_t n) 参数 pwc — 指向类型为 wchar_t 对象的指针。 str — 指向多字节字符的第一个字节的指针。 n — 要被检查的最大字节数。 返回值 如果 str 不为 NULL,mbtowc() 函数返回 str 开始消耗的字节数,如果指向一个空字节,则返回 0,如果操作失败,则返回 -1。 如果 str 为 NULL,如果编码具有移位状态,则 mbtowc() 函数返回非零,如果编码是无状态的,则返回零。 实例 下面的实例演示了 mbtowc() 函数的用法。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str = "这里是 w3cschool.cn"; wchar_t mb[100]; int len; len = mblen(NULL, MB_CUR_MAX); mbtowc(mb, str, len*strlen(str) ); wprintf(L"%ls \n", mb ); return(0); } 让我们编译并运行上面的程序,这将产生以下结果,因为它要以多字节形式输出结果,这是一种二进制输出。 ??? C 标准库 – <stdlib.h>
2024-04-03
C 库函数 – calloc() C 标准库 – <stdlib.h> 描述 C 库函数 void *calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。 声明 下面是 calloc() 函数的声明。 void *calloc(size_t nitems, size_t size) 参数 nitems — 要被分配的元素个数。 size — 元素的大小。 返回值 该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。 实例 下面的实例演示了 calloc() 函数的用法。 #include <stdio.h> #include <stdlib.h> int main() { int i, n; int *a; printf("要输入的元素个数:"); scanf("%d",&n); a = (int*)calloc(n, sizeof(int)); printf("输入 %d 个数字:\n",n); for( i=0 ; i < n ; i++ ) { scanf("%d",&a[i]); } printf("输入的数字为:"); for( i=0 ; i < n ; i++ ) { printf("%d ",a[i]); } return(0); } 让我们编译并运行上面的程序,这将产生以下结果: 要输入的元素个数:3 输入 3 个数字: 22 55 14 输入的数字为:22 55 14 C 标准库 – <stdlib.h>
2024-04-03