当前位置: 首页 > news >正文

C标准库--通用工具<stdlib.h>

文章目录

  • 简介
  • 库变量
  • 库宏
  • 库函数
    •    1、double atof(const char *str)
    •    2、int atoi(const char *str)
    •    3、long int atol(const char *str)
    •    4、double strtod(const char *str, char **endptr)
    •    5、long int strtol(const char *str, char **endptr, int base)
    •    6、unsigned long int strtoul(const char *str, char **endptr, int base)
    •    7、void *calloc(size_t nitems, size_t size)
    •    8、void free(void *ptr)
    •    9、void *malloc(size_t size)
    •    10、void *realloc(void *ptr, size_t size)
    •    11、void abort(void)
    •    12、int atexit(void (*func)(void))
    •    13、void exit(int status)
    •    14、char *getenv(const char *name)
    •    15、int system(const char *string)
    •    16、void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
    •    17、void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
    •    18、int abs(int x)
    •    19、div_t div(int numer, int denom)
    •    20、long int labs(long int x)
    •    21、ldiv_t ldiv(long int numer, long int denom)
    •    22、int rand(void)
    •    23、void srand(unsigned int seed)
    •    24、int mblen(const char *str, size_t n)
    •    25、size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)
    •    26、int mbtowc(whcar_t *pwc, const char *str, size_t n)
    •    27、size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
    •    28、int wctomb(char *str, wchar_t wchar)

简介

  stdlib .h 头文件定义了四个变量类型、一些宏和各种通用工具函数。

库变量

  在这里插入图片描述

库宏

  在这里插入图片描述

库函数

   1、double atof(const char *str)

     把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
     参数
       str – 要转换为浮点数的字符串。
     返回值
       函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
     实例

			#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){float val;char str[20];strcpy(str, "98993489");val = atof(str);printf("字符串值 = %s, 浮点值 = %f\n", str, val);strcpy(str, "runoob");val = atof(str);printf("字符串值 = %s, 浮点值 = %f\n", str, val);return(0);}结果:字符串值 = 98993489, 浮点值 = 98993488.000000字符串值 = runoob, 浮点值 = 0.000000

   2、int atoi(const char *str)

     把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
     参数
       str – 要转换为整数的字符串。
     返回值
       该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

     实例

				#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){int val;char str[20];strcpy(str, "98993489");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);strcpy(str, "runoob.com");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);return(0);}结果:字符串值 = 98993489, 整型值 = 98993489字符串值 = runoob.com, 整型值 = 0

   3、long int atol(const char *str)

     把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
     参数
       str – 要转换为长整数的字符串。
     返回值
       该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

     实例

				#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, "runoob.com");val = atol(str);printf("字符串值 = %s, 长整型值 = %ld\n", str, val);return(0);}结果:字符串值 = 98993489, 长整型值 = 98993489字符串值 = runoob.com, 长整型值 = 0

   4、double strtod(const char *str, char **endptr)

     把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
     参数
       str – 要转换为双精度浮点数的字符串。
       endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
     返回值
       该函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。

     实例

				#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|

   5、long int strtol(const char *str, char **endptr, int base)

     把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
     参数
       str – 要转换为长整数的字符串。
       endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
       base – 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
     返回值
       该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

     实例

				#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|

   6、unsigned long int strtoul(const char *str, char **endptr, int base)

     把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。
     参数
       str – 要转换为无符号长整数的字符串。
       endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
       base – 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
     返回值
       该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。

     实例

				#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|

   7、void *calloc(size_t nitems, size_t size)

     分配所需的内存空间,并返回一个指向它的指针。
     参数
       nitems – 要被分配的元素个数。
       size – 元素的大小。
     返回值
       该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。

     实例

				#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]);}free (a);  // 释放内存return(0);}结果:要输入的元素个数:3输入 3 个数字:225514输入的数字为:22 55 14

   8、void free(void *ptr)

     释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
     参数
       ptr – 指针指向一个要释放内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果传递的参数是一个空指针,则不会执行任何动作。
     返回值
       该函数不返回任何值。

     实例

				#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char *str;/* 最初的内存分配 */str = (char *) malloc(15);strcpy(str, "runoob");printf("String = %s,  Address = %s\n", str, str);/* 重新分配内存 */str = (char *) realloc(str, 25);strcat(str, ".com");printf("String = %s,  Address = %s\n", str, str);/* 释放已分配的内存 */free(str);return(0);}让我们编译并运行上面的程序,这将产生以下结果:String = runoob,  Address = 3351249760String = runoob.com,  Address = 3351249760

   9、void *malloc(size_t size)

     分配所需的内存空间,并返回一个指向它的指针。
     参数
       size – 内存块的大小,以字节为单位。
     返回值
       该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

     实例

			#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){char *str;/* 最初的内存分配 */str = (char *) malloc(15);strcpy(str, "runoob");printf("String = %s,  Address = %u\n", str, str);/* 重新分配内存 */str = (char *) realloc(str, 25);strcat(str, ".com");printf("String = %s,  Address = %u\n", str, str);free(str);return(0);}结果:String = runoob,  Address = 3662685808String = runoob.com,  Address = 3662685808

   10、void *realloc(void *ptr, size_t size)

     尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
     参数
       ptr – 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。
        如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。
       size – 内存块的新的大小,以字节为单位。
        如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。
     返回值
       该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。

     实例

				#include <stdio.h>#include <stdlib.h>int main(){char *str;/* 最初的内存分配 */str = (char *) malloc(15);strcpy(str, "runoob");printf("String = %s,  Address = %u\n", str, str);/* 重新分配内存 */str = (char *) realloc(str, 25);strcat(str, ".com");printf("String = %s,  Address = %u\n", str, str);free(str);return(0);}结果:String = runoob, Address = 355090448String = runoob.com, Address = 355090448

   11、void abort(void)

     使一个异常程序终止。
     返回值
       该函数不返回任何值。

     实例

				#include <stdio.h>#include <stdlib.h>int main (){FILE *fp;printf("准备打开 nofile.txt\n");fp = fopen( "nofile.txt","r" );if(fp == NULL){printf("准备终止程序\n");abort();}printf("准备关闭 nofile.txt\n");fclose(fp);return(0);}让我们编译并运行上面的程序,这将产生以下结果,因为我们尝试打开的文件 nofile.txt 是不存在的:准备打开 nofile.txt准备终止程序

   12、int atexit(void (*func)(void))

     当程序正常终止时,调用指定的函数 func。
     参数
       func – 在程序终止时被调用的函数。
     返回值
       如果函数成功注册,则该函数返回零,否则返回一个非零值。

     实例

				#include <stdio.h>#include <stdlib.h>void functionA (){printf("这是函数A\n");}int main (){/* 注册终止函数 */atexit(functionA );printf("启动主程序...\n");printf("退出主程序...\n");return(0);}结果:启动主程序...退出主程序...这是函数A

   13、void exit(int status)

     使程序正常终止。
     参数
       status – 返回给父进程的状态值。
     返回值
       该函数不返回值。

     实例

				#include <stdio.h>#include <stdlib.h>int main (){printf("程序的开头....\n");printf("退出程序....\n");exit(0);printf("程序的结尾....\n");return(0);}结果:程序的开头....退出程序....

   14、char *getenv(const char *name)

     搜索 name 所指向的环境字符串,并返回相关的值给字符串。
     参数
       name – 包含被请求变量名称的 C 字符串。
     返回值
       该函数返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL。

     实例

				#include <stdio.h>#include <stdlib.h>int main (){printf("PATH : %s\n", getenv("PATH"));printf("HOME : %s\n", getenv("HOME"));printf("ROOT : %s\n", getenv("ROOT"));return(0);}结果:PATH : /sbin:/usr/sbin:/bin:/usr/bin:/usr/local/binHOME : /ROOT : (null)

   15、int system(const char *string)

     由 string 指定的命令传给要被命令处理器执行的主机环境。
     参数
       command – 包含被请求变量名称的 C 字符串。
     返回值
       如果发生错误,则返回值为 -1,否则返回命令的状态。

     实例

				#include <stdio.h>#include <string.h>#include<stdlib.h>int main (){char command[50];strcpy( command, "dir" );system(command);return(0);}结果:a.txtamit.doc

   16、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 – 用来比较两个元素的函数。
     返回值
       如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。.

     实例

				#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 (){int *item;int key = 32;/* 使用 bsearch() 在数组中查找值 32 */item = (int*) bsearch (&key, values, 5, sizeof (int), cmpfunc);if( item != NULL ) {printf("Found item = %d\n", *item);}else {printf("Item = %d could not be found\n", *item);}return(0);}结果:Found item = 32

   17、void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void))

     数组排序。
     参数
       base – 指向要排序的数组的第一个元素的指针。
       nitems – 由 base 指向的数组中元素的个数。
       size – 数组中每个元素的大小,以字节为单位。
       compar – 用来比较两个元素的函数。
     返回值
       该函数不返回任何值。

     实例

				#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);printf("\n排序之后的列表:\n");for( n = 0 ; n < 5; n++ ) {printf("%d ", values[n]);}return(0);}结果:排序之前的列表:88 56 100 2 25 排序之后的列表:2 25 56 88 100

   18、int abs(int x)

     返回 x 的绝对值。
     参数
       x – 完整的值。
     返回值
       该函数返回 x 的绝对值。

    实例

				#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 的值 = 5b 的值 = 10

   19、div_t div(int numer, int denom)

     分子除以分母。
     参数
       numer – 分子。
       denom – 分母。
     返回值
       该函数返回定义在 中的结构中的值,该结构有两个成员,如 div_t:int quot; int rem;。

     实例

				#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

   20、long int labs(long int x)

     返回 x 的绝对值。
     参数
       x – 完整的值。
     返回值
       该函数返回 x 的绝对值。

     实例

				#include <stdio.h>#include <stdlib.h>int main (){long int a,b;a = labs(65987L);printf("a 的值 = %ld\n", a);b = labs(-1005090L);printf("b 的值 = %ld\n", b);return(0);}结果:a 的值 = 65987b 的值 = 1005090

   21、ldiv_t ldiv(long int numer, long int denom)

     分子除以分母。
     参数
       numer – 分子。
       denom – 分母。
     返回值
       该函数返回定义在 中的结构中的值,该结构有两个成员,如 ldiv_t:long quot; long rem;。

     实例

				#include <stdio.h>#include <stdlib.h>int main (){ldiv_t output;output = ldiv(100000L, 30000L);printf("商 = %ld\n", output.quot);printf("余数 = %ld\n", output.rem);return(0);}结果:商 = 3余数 = 10000

   22、int rand(void)

     返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
     返回值
       该函数返回一个范围在 0 到 RAND_MAX 之间的整数值。

     实例

				#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){int i, n;time_t t;n = 5;/* 初始化随机数发生器 */srand((unsigned) time(&t));/* 输出 0 到 49 之间的 5 个随机数 */for( i = 0 ; i < n ; i++ ) {printf("%d\n", rand() % 50);}return(0);}结果:3845292947

   23、void srand(unsigned int seed)

     该函数播种由函数 rand 使用的随机数发生器。
     参数
       seed – 这是一个整型值,用于伪随机数生成算法播种。
     返回值
       该函数不返回任何值。
     实例

				#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){int i, n;time_t t;n = 5;/* 初始化随机数发生器 */srand((unsigned) time(&t));/* 输出 0 到 50 之间的 5 个随机数 */for( i = 0 ; i < n ; i++ ) {printf("%d\n", rand() % 50);}return(0);}让我们编译并运行上面的程序,这将产生以下结果:3845292947

   24、int mblen(const char *str, size_t n)

     返回参数 str 所指向的多字节字符的长度。
     参数
       str – 指向多字节字符的第一个字节的指针。
       n – 要检查的字符长度的最大字节数。
     返回值
       如果识别了一个非空宽字符,mblen() 函数返回 str 开始的多字节序列解析的字节数。如果识别了一个空宽字符,则返回 0。如果识别了一个无效的多字节序列,或者不能解析一个完整的多字节字符,则返回 -1。

     实例

				#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);len = mblen( pmb, MB_CUR_MAX );printf( "多字节字符 %x 的字节长度:%u\n", pmb, len );pmb = NULL;len = mblen( pmb, MB_CUR_MAX );printf( "多字节字符 %x 的字节长度:%u\n", pmb, len );return(0);}结果:转换为多字节字符串被转换的字符 1第一个多字节字符的十六进制值:0x168c6010多字节字符 168c6010 的字节长度:1多字节字符 0 的字节长度:0

   25、size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)

     把参数 str 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。
     参数
       pwcs – 指向一个 wchar_t 元素的数组,数组长度足以存储一个最大字符长度的宽字符串。
       str – 要被转换的多字节字符字符串。
       n – 要被转换的最大字符数。
     返回值
       该函数返回转换的字符数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。

     实例

				#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第一个多字节字符的十六进制值:0x19a60010转换回宽字符字符串被转换的字符 1第一个宽字符的十六进制值:0x19a60030

   26、int mbtowc(whcar_t *pwc, const char *str, size_t n)

     检查参数 str 所指向的多字节字符。
     参数
       pwc – 指向类型为 wchar_t 对象的指针。
       str – 指向多字节字符的第一个字节的指针。
       n – 要被检查的最大字节数。
     返回值
       如果 str 不为 NULL,mbtowc() 函数返回 str 开始消耗的字节数,如果指向一个空字节,则返回 0,如果操作失败,则返回 -1。
       如果 str 为 NULL,如果编码具有移位状态,则 mbtowc() 函数返回非零,如果编码是无状态的,则返回零。
     实例

				#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){char *str = "这里是 runoob.com";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);}让我们编译并运行上面的程序,这将产生以下结果,因为它要以多字节形式输出结果,这是一种二进制输出。???

   27、size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)

     把数组 pwcs 中存储的编码转换为多字节字符,并把它们存储在字符串 str 中。
     参数
       str – 指向一个 char 元素的数组,至少有 n 字节长。
       pwcs – 要被转换的宽字符字符串。
       n – 要被写入到 str 中的最大字节数。
     返回值
       该函数返回转换和写入到 str 中的字节数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。

     实例

				#include <stdio.h>#include <stdlib.h>#define BUFFER_SIZE 50int main(){size_t ret;char *MB = (char *)malloc( BUFFER_SIZE );wchar_t *WC = L"http://www.w3cschool.cc";/* 转换宽字符字符串 */ret = wcstombs(MB, WC, BUFFER_SIZE);printf("要转换的字符数 = %u\n", ret);printf("多字节字符 = %s\n\n", MB);return(0);}结果:要转换的字符数 = 23多字节字符 = http://www.w3cschool.cc

   28、int wctomb(char *str, wchar_t wchar)

     检查对应于参数 wchar 所给出的多字节字符的编码。
     参数
       str – 一个指针,指向一个足以存储多字节字符的数组。
       wchar – 类型为 wchar_t 的宽字符。
     返回值
       如果 str 不为 NULL,wctomb() 函数返回写入字节数组中的字节数。如果 wchar 不能被表示为一个多字节序列,则会返回 -1。
       如果 str 为 NULL,如果编码具有移位状态,则 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多字节字符:
http://www.dtcms.com/a/504651.html

相关文章:

  • 基于ArcGIS的台风轨迹及影响范围分析 | 追明月清风,也追台风
  • 个人网站怎么建立步骤诚信网站认证必需做吗
  • 机械加工网站有哪些微信小程序客户管理系统
  • 企业网站外包建设seo交流
  • 广东建泰建设有限公司网站找建设网站公司吗
  • 响应式布局模板网站免费下载wordpress连接谷歌
  • 东莞市网站建设服务机构做miui主题网站
  • spring从入门到精通(spring学习笔记,持续更新中)
  • 32HAL——蓝牙BT24模块
  • 广州知名的网站建设公司网站管理过程
  • 大同网站建设易企秀在线制作免费
  • 接口测试与接口自动化测试面试题+回答汇总
  • 大型网站的制作合肥网站建设优化学习
  • 学校做网站及费用wordpress侧边菜单栏
  • 【Java】内部类
  • 公司网站建设费用科目深圳建设工程质量协会网站
  • 怎样注册网站建立网页电商数据分析师
  • 玉雕网站建设全球可以做外贸的社交网站有哪些
  • linux 系统有哪些以及Ubuntu安装
  • 设备健康管理大数据平台:从数据治理到智能决策的全链路技术实现
  • 开发企业网站多少钱重庆建筑信息工程官网
  • Flutter 学习资源及视频
  • 建网站的方法wordpress新浪微博
  • 接口测试的流程
  • 给人做网站能赚钱吗网站试用模块
  • 深圳做营销网站的公司大型物流公司网站
  • AI 食用指南--更好的用AI编程
  • 红蓝眼睛谜题
  • 电子邮件协议
  • 做全网营销型网站建设智慧景区网站建设