C 语言标准库 - <stdlib.h>

目录

1.类型别名和宏

2.abs(),labs(),llabs()

3.div(),ldiv(),lldiv()

4.字符串转成数值

4.1 a 系列函数

4.2 str 系列函数(浮点数转换)

4.3 str 系列函数(整数转换)

5.rand()

6.srand()

7.abort()

8.exit(),quick_exit(),_Exit()

9.atexit(),at_quick_exit()

10.getenv()

11.system()

12.内存管理函数

12.1 aligned_alloc()

13.qsort()

14.bsearch()

15.多字节字符函数


1.类型别名和宏

stdlib.h 定义了下面的类型别名。

  • size_t:sizeof 的返回类型。
  • wchar_t:宽字符类型。

stdlib.h 定义了下面的宏。

  • NULL:空指针。
  • EXIT_SUCCESS:函数运行成功时的退出状态。
  • EXIT_FAILURE:函数运行错误时的退出状态。
  • RAND_MAX:rand() 函数可以返回的最大值。
  • MB_CUR_MAX:当前语言环境中,多字节字符占用的最大字节数。

2.abs(),labs(),llabs()

这三个函数用于计算整数的绝对值。abs()用于 int 类型,labs()用于 long int 类型,llabs()用于 long long int 类型。

int abs(int j);
long int labs(long int j);
long long int llabs(long long int j);

下面是用法示例。

// 输出 |-2| = 2
printf("|-2| = %d\n", abs(-2));// 输出 |4|  = 4
printf("|4|  = %d\n", abs(4));

3.div(),ldiv(),lldiv()

这三个函数用来计算两个参数的商和余数。div()用于 int 类型的相除,ldiv()用于 long int 类型的相除,lldiv()用于 long long int 类型的相除。

div_t div(int numer, int denom);
ldiv_t ldiv(long int numer, long int denom);
lldiv_t lldiv(long long int numer, long long int denom);

这些函数把第2个参数(分母)除以第1个参数(分子),产生商和余数。这两个值通过一个数据结构返回,div()返回 div_t 结构,ldiv()返回 ldiv_t 结构,lldiv()返回 lldiv_t 结构。

这些结构都包含下面两个字段,

int quot;  // 商
int rem;  // 余数

它们完整的定义如下。

typedef struct {int quot, rem;
} div_t;typedef struct {long int quot, rem;
} ldiv_t;typedef struct {long long int quot, rem;
} lldiv_t;

下面是一个例子。

div_t d = div(64, -7);// 输出 64 / -7 = -9
printf("64 / -7 = %d\n", d.quot);// 输出 64 % -7 = 1
printf("64 %% -7 = %d\n", d.rem);

4.字符串转成数值

4.1 a 系列函数

stdlib.h定义了一系列函数,可以将字符串转为数字。

  • atoi():字符串转成 int 类型。
  • atof():字符串转成 double 类型。
  • atol():字符串转成 long int 类型。
  • atoll():字符串转成 long long int 类型。

它们的原型如下。

int atoi(const char* nptr);
double atof(const char* nptr);
long int atol(const char* nptr);
long long int atoll(const char* nptr);

上面函数的参数都是一个字符串指针,字符串开头的空格会被忽略,转换到第一个无效字符处停止。函数名称里面的a代表 ASCII,所以atoi()的意思是“ASCII to int”。

它们返回转换后的数值,如果字符串无法转换,则返回0

下面是用法示例。

atoi("3490")   // 3490
atof("3.141593")   // 3.141593

如果参数是数字开头的字符串,atoi()会只转换数字部分,比如atoi("42regular")会返回整数42。如果首字符不是数字,比如“hello world”,则会返回0

4.2 str 系列函数(浮点数转换)

stdlib.h还定义了一些更强功能的浮点数转换函数。

  • strtof():字符串转成 float 类型。
  • strtod():字符串转成 double 类型。
  • strtold():字符串转成 long double 类型。

它们的原型如下。

float strtof(const char* restrict nptr,char** restrict endptr
);double strtod(const char* restrict nptr,char** restrict endptr
);long double strtold(const char* restrict nptr,char** restrict endptr
);

它们都接受两个参数,第一个参数是需要转换的字符串,第二个参数是一个指针,指向原始字符串里面无法转换的部分。

  • nptr:待转换的字符串(起首的空白字符会被忽略)。
  • endprt:一个指针,指向不能转换部分的第一个字符。如果字符串可以完全转成数值,该指针指向字符串末尾的终止符\0。这个参数如果设为 NULL,就表示不需要处理字符串剩余部分。

它们的返回值是已经转换后的数值。如果字符串无法转换,则返回0。如果转换结果发生溢出,errno 会被设置为 ERANGE。如果值太大(无论是正数还是负数),函数返回HUGE_VAL;如果值太小,函数返回零。

char *inp = "   123.4567abdc";
char *badchar;double val = strtod(inp, &badchar);printf("%f\n", val); // 123.456700
printf("%s\n", badchar); // abdc

字符串可以完全转换的情况下,第二个参数指向\0,因此可以用下面的写法判断是否完全转换。

if (*endptr == '\0') {// 完全转换
} else {// 存在无法转换的字符
}

如果不关心没有转换的部分,则可以将 endptr 设置为 NULL。

这些函数还可以将字符串转换为特殊值 Infinity 和 NaN。如果字符串包含 INF 或 INFINITY(大写或小写皆可),则将转换为 Infinity;如果字符串包含 NAN,则将返回 NaN。

4.3 str 系列函数(整数转换)

str 系列函数也有整数转换的对应函数。

  • strtol():字符串转成 long int 类型。
  • strtoll():字符串转成 long long int 类型。
  • strtoul():字符串转成 unsigned long int 类型。
  • strtoull():字符串转成 unsigned long long int 类型。

它们的原型如下。

long int strtol(const char* restrict nptr,char** restrict endptr,int base
);long long int strtoll(const char* restrict nptr,char** restrict endptr,int base
);unsigned long int strtoul(const char* restrict nptr,char** restrict endptr,int base
);unsigned long long int strtoull(const char* restrict nptr,char** restrict endptr, int base
);

它们接受三个参数。

(1)nPtr:待转换的字符串(起首的空白字符会被忽略)。

(2)endPrt:一个指针,指向不能转换部分的第一个字符。如果字符串可以完全转成数值,该指针指向字符串末尾的终止符\0。这个参数如果设为 NULL,就表示不需要处理字符串剩余部分。

(3)base:待转换整数的进制。这个值应该是236之间的整数,代表相应的进制,如果是特殊值0,表示让函数根据数值的前缀,自己确定进制,即如果数字有前缀0,则为八进制,如果数字有前缀0x0X,则为十六进制。

它们的返回值是转换后的数值,如果转换不成功,返回0

下面是转换十进制整数的例子。

char* s = "3490";
unsigned long int x = strtoul(u, NULL, 10);printf("%lu\n", x); // 3490

下面是转换十六进制整数的例子。

char* end;long value = strtol("0xff", &end, 16);
printf("%ld\n", value); // 255
printf("%s\n", end); // 无内容value = strtol("0xffxx", &end, 16);
printf("%ld\n", value); // 255
printf("%s\n", end); // xx

上面示例中,strtol()可以指定字符串包含的是16进制整数。不能转换的部分,可以使用指针end进行访问。

下面是转换二进制整数的例子。

char* s = "101010";
unsigned long int x = strtoul(s, NULL, 2);printf("%lu\n", x); // 42

下面是让函数自行判断整数进制的例子。

#include <stdio.h>
#include <stdlib.h>int main(void) {const char* string = "-1234567abc";char* remainderPtr;long x = strtol(string, &remainderPtr, 0);printf("%s\"%s\"\n%s%ld\n%s\"%s\"\n","The original string is ",string,"The converted value is ",x,"The remainder of the original string is ",remainderPtr);
}

上面代码的输出结果如下。

The original string is "-1234567abc"
The converted value is -1234567
The remainder of the original string is "abc"

如果被转换的值太大,strtol()函数在errno中存储ERANGE这个值,并返回LONG_MIN(原值为负数)或LONG_MAX(原值为正数),strtoul()则返回ULONG_MAX

5.rand()

rand()函数用来生成 0~RAND_MAX 之间的随机整数。RAND_MAX是一个定义在stdlib.h里面的宏,通常等于 INT_MAX。

// 原型
int rand(void);// 示例
int x = rand();

如果希望获得整数 N 到 M 之间的随机数(包括 N 和 M 两个端点值),可以使用下面的写法。

int x = rand() % (M - N + 1) + N;

比如,1 到 6 之间的随机数,写法如下。

int x = rand() % 6 + 1;

获得浮点数的随机值,可以使用下面的写法。

// 0 到 0.999999 之间的随机数
printf("0 to 0.99999: %f\n", rand() / ((float)RAND_MAX + 1));// n 到 m 之间的随机数:
// n + m * (rand() / (float)RAND_MAX)
printf("10.5 to 15.7: %f\n", 10.5 + 5.2 * rand() / (float)RAND_MAX);

上面示例中,由于rand()RAND_MAX都是 int 类型,要用显示的类型转换转为浮点数。

6.srand()

rand()是伪随机数函数,为了增加随机性,必须在调用它之前,使用srand()函数重置一下种子值。

srand()函数接受一个无符号整数(unsigned int)作为种子值,没有返回值。

void srand(unsigned int seed);

通常使用time(NULL)函数返回当前距离时间纪元的秒数,作为srand()的参数。

#include <time.h>
srand((unsigned int) time(NULL));

上面代码中,time()的原型定义在头文件time.h里面,返回值的类型是类型别名time_t,具体的类型与系统有关,所以要强制转换一下类型。time()的参数是一个指针,指向一个具体的 time_t 类型的时间值,这里传入空指针NULL作为参数,由于 NULL 一般是0,所以也可以写成time(0)

7.abort()

abort()用于不正常地终止一个正在执行的程序。使用这个函数的目的,主要是它会触发 SIGABRT 信号,开发者可以在程序中为这个信号设置一个处理函数。

void abort(void);

该函数没有参数。

8.exit(),quick_exit(),_Exit()

这三个函数都用来退出当前正在执行的程序。

void exit(int status);
void quick_exit(int status);
void _Exit(int status);

它们都接受一个整数,表示程序的退出状态,0是正常退出,非零值表示发生错误,可以使用宏EXIT_SUCCESSEXIT_FAILURE当作参数。它们本身没有返回值。

它们的区别是,退出时所做的清理工作不同。exit()是正常退出,系统会做完整的清理,比如更新所有文件流,并且删除临时文件。quick_exit()是快速退出,系统的清理工作稍微少一点。_Exit()是立即退出,不做任何清理工作。

下面是一些用法示例。

exit(EXIT_SUCCESS);
quick_exit(EXIT_FAILURE);
_Exit(2);

9.atexit(),at_quick_exit()

atexit()用来登记当前程序退出时(调用exit()main()正常退出),所要执行的其他函数。

at_quick_exit()则是登记使用quick_exit()方法退出当前程序时,所要执行的其他函数。

exit()只能触发atexit()登记的函数,quick_exit()只能触发at_quick_exit()登记的函数。

int atexit(void (*func)(void));
int at_quick_exit(void (*func)(void));

它们的参数是要执行的函数地址,即函数名。它们的返回值都是调用成功时返回0,调用失败时返回非零值。

下面是一个例子。

void sign_off(void);
void too_bad(void);int main(void) {int n;atexit(sign_off);   /* 注册 sign_off()函数 */puts("Enter an integer:");if (scanf("%d", &n) != 1) {puts("That's no integer!");atexit(too_bad); /* 注册 too_bad()函数 */exit(EXIT_FAILURE);}printf("%d is %s.\n", n, (n % 2 == 0) ? "even" : "odd");return 0;
}void sign_off(void) {puts("sign_off");
}void too_bad(void) {puts("too bad");
}

上面示例中,用户输入失败时,会调用sign_off()too_bad()函数;但是输入成功时只会调用sign_off()。因为只有输入失败时,才会进入if语句登记too_bad()

另外,如果有多条atexit()语句,函数退出时最先调用的,是最后一个登记的函数。

atexit()登记的函数(如上例的sign_offtoo_bad)应该不带任何参数且返回类型为void。通常,这些函数会执行一些清理任务,例如删除临时文件或重置环境变量。

at_quick_exit()也是同样的规则,下面是一个例子。

void exit_handler_1(void) {printf("1\n");
}void exit_handler_2(void) {printf("2\n");
}int main(void) {at_quick_exit(exit_handler_1);at_quick_exit(exit_handler_2);quick_exit(0);
}

执行上面的示例,命令行会先输出2,再输出1。

10.getenv()

getenv()用于获取环境变量的值。环境变量是操作系统提供的程序之外的一些环境参数。

char* getenv(const char* name);

它的参数是一个字符串,表示环境变量名。返回值也是一个字符串,表示环境变量的值。如果指定的环境变量不存在,则返回 NULL。

下面是输出环境变量$PATH的值的例子。

printf("PATH is %s\n", getenv("PATH"));

11.system()

system()函数用于执行外部程序。它会把它的参数字符串传递给操作系统,让操作系统的命令处理器来执行。

void system( char const * command );

这个函数的返回值因编译器而异。但是标准规定,如果 NULL 作为参数,表示询问操作系统,是否有可用的命令处理器,如果有的话,返回一个非零值,否则返回零。

下面是执行ls命令的例子。

system("ls -l"); 

12.内存管理函数

stdlib.h 提供了一些内存操作函数,下面几个函数详见《内存管理》一章,其余在本节介绍。

  • malloc():分配内存区域
  • calloc():分配内存区域。
  • realloc():调节内存区域大小。
  • free():释放内存区域。

12.1 aligned_alloc()

很多系统有内存对齐的要求,即内存块的大小必须是某个值(比如64字节)的倍数,这样有利于提高处理速度。aligned_alloc()就用于分配满足内存对齐要求的内存块,它的原型如下。

void* aligned_alloc(size_t alignment, size_t size);

它接受两个参数。

  • alignment:整数,表示内存对齐的单位大小,一般是2的整数次幂(2、4、8、16……)。
  • size:整数,表示内存块的大小。

分配成功时,它返回一个无类型指针,指向新分配的内存块。分配失败时,返回 NULL。

char* p = aligned_alloc(64, 256);

上面示例中,aligned_alloc()分配的内存块,单位大小是64字节,要分配的字节数是256字节。

13.qsort()

qsort()用来快速排序一个数组。它对数组成员的类型没有要求,任何类型数组都可以用这个函数排序。

void qsort(void *base,size_t nmemb, size_t size,int (*compar)(const void *, const void *)
);

该函数接受四个参数。

  • base:指向要排序的数组开始位置的指针。
  • nmemb:数组成员的数量。
  • size:数组每个成员占用的字节长度。
  • compar:一个函数指针,指向一个比较两个成员的函数。

比较函数compar将指向数组两个成员的指针作为参数,并比较两个成员。如果第一个参数小于第二个参数,该函数应该返回一个负值;如果两个函数相等,返回0;如果第一个参数大于第二个参数,应该返回一个正数。

下面是一个用法示例。

#include <stdio.h>
#include <stdlib.h>int compar(const void* elem0, const void* elem1) {const int* x = elem0;const int* y = elem1; return *x - *y;
}int main(void) {int a[9] = {14, 2, 3, 17, 10, 8, 6, 1, 13};qsort(a, 9, sizeof(int), compar);for (int i = 0; i < 9; i++)printf("%d ", a[i]);putchar('\n');
}

执行上面示例,会输出排序好的数组“1 2 3 6 8 10 13 14 17”。

14.bsearch()

bsearch()使用二分法搜索,在数组中搜索一个值。它对数组成员的类型没有要求,任何类型数组都可以用这个函数搜索值。

注意,该方法只对已经排序好的数组有效。

void *bsearch(const void* key,const void* base,size_t nmemb,size_t size,int (*compar)(const void *, const void *)
);

这个函数接受5个参数。

  • key:指向要查找的值的指针。
  • base:指向数组开始位置的指针,数组必须已经排序。
  • nmemb:数组成员的数量。
  • size:数组每个成员占用的字节长度。
  • compar:指向一个将待查找值与其他值进行比较的函数的指针。

比较函数compar将待查找的值作为第一个参数,将要比较的值作为第二个参数。如果第一个参数小于第二个参数,该函数应该返回一个负值;如果两个参数相等,返回0;如果第一个参数大于第二个参数,返回一个正值。

如果找到待查找的值,bsearch()返回指向该值的指针,如果找不到,返回 NULL。

下面是一个用法示例。

#include <stdio.h>
#include <stdlib.h>int compar(const void *key, const void *value) {const int* k = key;const int* v = value;return *k - *v;
}int main(void) {int a[9] = {2, 6, 9, 12, 13, 18, 20, 32, 47};int* r;int key;key = 12; // 包括在数组中r = bsearch(&key, a, 9, sizeof(int), compar);printf("Found %d\n", *r);key = 30;  // 不包括在数组中r = bsearch(&key, a, 9, sizeof(int), compar);if (r == NULL)printf("Didn't find 30\n");return 0;
}

执行上面的示例,会输出下面的结果。

Found 12
Didn't find 30

15.多字节字符函数

stdlib.h 提供了下面的函数,用来操作多字节字符,详见《多字节字符》一章。

  • mblen():多字节字符的字节长度。
  • mbtowc():将多字节字符转换为宽字符。
  • wctomb():将宽字符转换为多字节字符。
  • mbstowcs():将多字节字符串转换为宽字符串。
  • wcstombs():将宽字符串转换为多字节字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

统计学常用的分析方法:T检验

T检验是一种用于比较数据集均值差异的统计方法&#xff0c;包括单样本t检验、配对样本t检验和独立样本t检验&#xff0c;可通过MATLAB、Python和R等工具实现t检验。如果数据不符合正态分布&#xff0c;可考虑使用非参数分析&#xff0c;多余两组数据时&#xff0c;可采用多重比…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频&#xff0c;需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX &#xff0c;其他客户端从流媒体服务器拉流。 步骤如下&#xff1a; 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

网络安全-web架构-nginx配置

1. nginx访问&#xff1a; 访问的是index.html&#xff0c; 访问ip访问的资源就是在/usr/share/nginx/html中&#xff1b; 当nginx不认识&#xff0c;浏览器认识的话&#xff0c;浏览器会自动渲染。 当nginx认识&#xff0c;浏览器不认识的话&#xff0c;浏览器会把它加载成…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 什么是深度学习&#xff1f; 人工智能、机器学习与…

Chinese SimpleQA:包含3000个高质量问题,覆盖6个主要主题,每个主题下有99个细分主题,用来评估大型语言模型中文事实性能力的基准测试.

2024-11-12, 由阿里巴巴集团旗下的淘宝和天猫团队创建的Chinese SimpleQA数据集&#xff0c;是首个全面评估语言模型回答简短问题事实性能力的中文基准测试。该数据集的创建&#xff0c;为理解和提升大型语言模型在中文环境下的事实性回答能力提供了重要的工具和标准。 数据集…

Kafka 生产者优化与数据处理经验

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare&#xff08;金融数据库&#xff09;入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

shell第一次作业

要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务是…

1+X应急响应(网络)病毒与木马的处置:

病毒与木马的处置&#xff1a; 病毒与木马的简介&#xff1a; 病毒和木马的排查与恢复&#xff1a;

服务器数据恢复—热备盘未激活导致硬盘掉线的raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌X3850服务器中有一组由数块SAS硬盘组建的RAID5阵列&#xff0c;该阵列中有一块盘是热备盘。操作系统为linux redhat&#xff0c;上面跑着一个基于oracle数据库的oa。 服务器故障&#xff1a; 服务器raid5阵列中有一块硬盘离线&#xff0…

Eclipse 创建Dynamic web project项目-配置Tomcat服务器

1、new——>project: 2、选择web的 Dynamic web project项目: 3、 项目命名&#xff0c;选择new runtime(没有部署过web项目&#xff0c;一般tartget runtime选项里面是空的)&#xff1a; 4、完成1、2的路径选择&#xff1a; 5、完成两个选项操作后&#xff0c;点击finish &…

理解折半查找法

理解折半查找法&#xff1a;高效的查找算法 折半查找法&#xff08;又称二分查找法&#xff09;是一种高效的查找算法&#xff0c;用于查找一个已排序数组中的目标元素。与线性查找方法不同&#xff0c;折半查找每次都将搜索范围减半&#xff0c;从而大幅提升查找效率。本文将详…

VM虚拟机装MAC后无法联网,如何解决?

✨在vm虚拟机上&#xff0c;给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址 ✨在MacOS设置中设置网络 以太网 使用DHCP ✨回到本地电脑上&#xff0c;打开 服务&#xff0c;找到VMware DHCP和VMware NAT&#xff0c;把这两个服务打开&#xff0c;专一般问题就…

力扣 LeetCode 236. 二叉树的最近公共祖先(Day10:二叉树)

解题思路&#xff1a; 后序遍历 注意&#xff1a; p和q其中一个就是它们的公共祖先的情况也考虑到了&#xff0c;假设q是公共祖先&#xff0c;遇到q就直接返回&#xff0c;相当于是下面一边为空&#xff0c;一边不为空的情况&#xff0c;返回不为空就一边即可 class Solutio…

前端速通(HTML)

1. HTML HTML基础&#xff1a; 什么是HTML&#xff1f; 超文本&#xff1a; "超文本"是指通过链接连接不同网页或资源的能力。HTML支持通过<a>标签创建超链接&#xff0c;方便用户从一个页面跳转到另一个页面。 标记语言&#xff1a; HTML使用一组预定义的标签…

论文阅读——Performance Evaluation of Passive Tag to Tag Communications(一)

文章目录 摘要一、互耦对监听器标签输入阻抗的影响A. 无限细偶极子互阻抗的理论研究B. 电细偶极子的情况&#xff1a;理论与模拟C. 印刷偶极子的情况&#xff1a;电磁模拟与测量 二、T2T 通信系统的性能评估总结 论文来源&#xff1a;https://ieeexplore.ieee.org/document/970…

Palo Alto Networks PAN-OS身份认证绕过漏洞复现(CVE-2024-0012)

0x01 产品描述: PAN-OS 是运行 Palo Alto Networks 下一代防火墙的软件。通过利用 PAN-OS 本机内置的关键技术(App-ID、Content-ID、设备 ID 和用户 ID),可以在任何时间、任何地点完全了解和控制所有用户和设备中正在使用的应用程序。0x02 漏洞描述: PAN-OS 设备管理 Web …

使用ENSP实现静态路由

一、双路由器静态路由 1.项目拓扑 2.项目实现 (1)路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为1.1.1.1/24 ip address 1.1.1.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为192.168.1.1/24 ip ad…

Claude3.5-Sonnet和GPT-4o怎么选(附使用链接)

随着人工智能模型的不断进化&#xff0c;传统的评估标准已经逐渐变得陈旧和不再适用。以经典的“喝水测试”为例&#xff0c;过去广泛应用于检测模型能力&#xff0c;但现如今即便是国内的一些先进模型&#xff0c;也能够轻松答对这些简单的问题。因此&#xff0c;我们亟需引入…

uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题

uniappvue3ts H5端使用Quill富文本插件以及解决上传图片反显的问题 1.在项目中安装Quill npm i quill1.3.72.需要显示富文本的页面完整代码 <template><view><div ref"quillEditor" style"height: 65vh"></div></view> &…