【C语言】字符函数,字符串函数,内存函数
大家好!今天我们来学习C语言中的字符函数,字符串函数和内存函数。
目录
1. 字符函数
1.1 字符分类函数
1.2 字符转换函数
1.2.1 tolower(将大写字母转化为小写字母)
1.2.2 toupper(将小写字母转化为大写字母)
2. 字符串函数
2.1 字符串输入函数
2.1.1 gets()
2.1.2 fgets()
2.2 字符串输出函数 puts()
2.3 字符串求长度函数 strlen
2.4 长度不受限制的字符串函数
2.4.1 字符串复制函数 strcpy
2.4.2 字符串连接函数 strcat
2.4.3 字符串比较函数 strcmp
2.5 长度受限制的字符串函数
2.5.1 strncpy
2.5.2 strncat
2.5.3 strncmp
2.6 字符串查找函数 strstr
2.7 字符串分割函数 strtok
2.8 错误处理函数 strerror
3. 内存函数
3.1 memcpy
3.2 memmove
3.3 memset
3.4 memcmp
3. 总结
1. 字符函数
1.1 字符分类函数
字符分类函数的头文件为ctype.h
具体用法可以看这个:https://legacy.cplusplus.com/reference/cctype/

1.2 字符转换函数
字符转换函数的头文件也为ctype.h
1.2.1 tolower(将大写字母转化为小写字母)
函数原型:

用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>int main() {char ch = 'B';char new_ch = tolower(ch);printf("%c", new_ch);return 0;
}

1.2.2 toupper(将小写字母转化为大写字母)
函数原型:

用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>int main() {char ch = 'b';char new_ch = toupper(ch);printf("%c", new_ch);return 0;
}

2. 字符串函数
字符串输入函数和字符串输出函数的头文件均为stdio.h
其它的字符串函数头文件一般为string.h
2.1 字符串输入函数
2.1.1 gets()
函数原型:

gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。缓冲区(Buffer)又称为缓存(Cache),是内存空间的一部分。有时候,从键盘输入的内容,或者将要输出到显示器上的内容,会暂时进入缓冲区,待时机成熟,再一股脑将缓冲区中的所有内容“倒出”,我们才能看到变量的值被刷新,或者屏幕产生变化。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main() {char str[30];gets(str);puts(str);return 0;
}
但是这个函数在C或C++不可再用(自C11和C++14起),因为不安全
(不过在实际做题中,我发现有些oj上还是能用的~)

2.1.2 fgets()
因为前面说了gets()函数不安全,在新版C++已经不可再用,所以fgets()用来替代gets()。
但注意fgets()不会删除行末的回车字符
![]()
fgets()函数是C语言中的一个输入函数,用于从标准输入(例如键盘)读取一行字符串。
函数原型:

fgets()的作用是读取一行字符并存储到指定的字符串缓冲区中,直到读取到换行符或者达到指定的最大字符数(包括换行符)为止。
其中,str是指向存储读取字符串的缓冲区的指针,num是缓冲区的大小,stream是要读取的文件流(通常使用stdin表示标准输入)。
fgets函数返回指向存储读取字符串的缓冲区的指针,如果读取成功,则返回值与str相同,如果出现错误或者到达文件末尾,则返回NULL。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main() {char str[30];fgets(str,30,stdin);puts(str);return 0;
}

2.2 字符串输出函数 puts()
函数原型:

![]()
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main() {char str[30] = "hello world";puts(str);return 0;
}
2.3 字符串求长度函数 strlen
函数原型:

注意事项:
1. 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
含 '\0' )。
2. 参数指向的字符串必须要以 '\0' 结束。
3. 注意函数的返回值为size_t,是无符号的。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main() {char str[30] = "abcdef";printf("%d\n", strlen(str));return 0;
}

strlen的模拟实现
size_t my_strlen(const char* str)
{assert(str);int cnt = 0;while (*str!='\0'){cnt++;str++;}return cnt;
}
2.4 长度不受限制的字符串函数
2.4.1 字符串复制函数 strcpy
函数原型:

注意事项:
1. 源字符串必须以 '\0' 结束。
2. 会将源字符串中的 '\0' 拷贝到目标空间。
3. 目标空间必须足够大,以确保能存放源字符串。
4. 目标空间必须可变。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = { 0 };char str2[30] = "abcdef";strcpy(str1, str2);printf("%s\n",str1);return 0;
}
strcpy的模拟实现
char* my_strcpy(char *dest,const char *src)
{assert(dest && src);char* ret = dest;while (*dest++=*src++){;}return ret;
}
2.4.2 字符串连接函数 strcat
函数原型:

注意事项:
1. 源字符串必须以 '\0' 结束。
2. 目标空间必须有足够的大,能容纳下源字符串的内容。
3. 目标空间必须可修改。
4. 字符串不能自己追加自己
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "hello ";char str2[30] = "world";printf("%s\n",strcat(str1,str2));return 0;
}

strcat的模拟实现
char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* ret = dest;while (*dest!='\0')dest++;while (*dest++ = *src++){;}return ret;
}
2.4.3 字符串比较函数 strcmp
函数原型:

标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字。
第一个字符串等于第二个字符串,则返回0。
第一个字符串小于第二个字符串,则返回小于0的数字。
我们结合下图就能很直观理解上面的标准规定~

用法示例:
情况一:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "above";char str2[30] = "about";printf("%d\n",strcmp(str1,str2));return 0;
}

情况二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "About";char str2[30] = "about";printf("%d\n",strcmp(str1,str2));return 0;
}
情况三:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "about";char str2[30] = "about";printf("%d\n",strcmp(str1,str2));return 0;
}
strcmp的模拟实现
int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}if (*str1 > *str2) return 1;else return -1;
}
2.5 长度受限制的字符串函数
2.5.1 strncpy
函数原型:

注意事项:
1. 拷贝num个字符从源字符串到目标空间。
2. 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "abcdef";char str2[30] = "xxxxxxxxxxxxxx";strncpy(str1, str2, 4);printf("%s\n", str1);return 0;
}
2.5.2 strncat
函数原型:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "hello ";char str2[30] = "worldxxxxxx";strncat(str1, str2, 5);printf("%s\n", str1);return 0;
}
2.5.3 strncmp
函数原型:

逐个比较两个字符串字符的ASCII码值,直到出现不一样的字符或者一个字符串结束或者num个字符全部比较完。

用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "abc";char str2[30] = "abcdef";char str3[30] = "aba";printf("%d\n", strncmp(str1, str2, 3));printf("%d\n", strncmp(str1, str2, 4));printf("%d\n", strncmp(str1, str3, 5));return 0;
}
2.6 字符串查找函数 strstr
函数原型:

strstr函数的作用是在字符串str1中查找是否含有字符串str2的子串,如果存在,返回str2在str1中第一次出现的地址;否则返回空指针NULL。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str1[30] = "abcdef";char str2[30] = "abc";if (strstr(str1, str2))printf("找到了\n");elseprintf("找不到\n");return 0;
}

strstr的模拟实现
char* my_strstr(char* str1, char* str2)
{assert(str1 && str2);char* cp = str1;char* s1 = cp;char* s2 = str2;if (str2 == '\0')return str1;while (*cp){s1 = cp;s2 = str2;while (*s1 && *s2 && *s1 == *s2){s1++;s2++;}if (*s2 == '\0')return cp;cp++;}return NULL;
}
2.7 字符串分割函数 strtok
strtok函数的作用是将一个字符串按照指定的分隔符进行分割,并返回分割后的子字符串。
函数原型:

注意事项:
1. sep参数是个字符串,定义了用作分隔符的字符集合。
2. 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
3. strtok函数找到str中的下一个标记,并将其用' \0' 结尾,返回一个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
4. strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
5. strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
6. 如果字符串中不存在更多的标记,则返回NULL 指针。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main() {char str[] = "Hello, world! How are you today?";char delim[] = " ,!?"; // 分隔符包括空格、逗号和感叹号// 使用第一次调用strtok函数char* token = strtok(str, delim);// 循环调用strtok函数以获取每个子字符串while (token != NULL) {printf("%s\n", token);token = strtok(NULL, delim);}return 0;
}
以上代码将输入字符串"Hello, world! How are you today?"按照空格、逗号和感叹号作为分隔符,将其分割成多个子字符串,并依次打印每个子字符串。输出结果如下:

注意:在整个循环过程中,使用NULL作为第一个参数,以便继续分割原字符串。这样可以依次获取每个子字符串。
2.8 错误处理函数 strerror
strerror的作用是根据给定的错误代码返回相应的错误描述字符串。
具体而言,strerror函数接受一个整数参数errno作为输入,该参数代表了一个错误代码。函数会根据给定的错误代码查找对应的错误描述字符串,并将其返回。
函数原型:

用法示例:
示例一:
下面代码是将错误码0~9所对应的错误信息给打印出来:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>int main()
{int i = 0;for (int i = 0; i < 10; i++){printf("%d:%s\n", i, strerror(i));}return 0;
}

示例二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <errno.h>int main() {FILE* file = fopen("nonexistent.file", "r");if (file == NULL) {int error_code = errno;const char* error_msg = strerror(error_code);printf("Failed to open file: %s\n", error_msg);}else {// 文件打开成功,继续其他操作// ...fclose(file);}return 0;
}
以上代码尝试打开一个名为"nonexistent.file"的文件,如果文件打开失败,则获取对应的错误代码,并使用strerror函数获取错误描述字符串,最后将错误描述字符串打印出来。输出结果类似于:

需要注意的是,strerror函数返回的错误描述字符串可能是静态分配的,多次调用strerror函数可能会覆盖之前的结果。因此,建议尽量将结果保存在变量中,而不是直接在printf等函数中使用strerror函数。
3. 内存函数
内存函数的头文件一般也为string.h
3.1 memcpy
memcpy函数作用是将指定长度的内存块从源地址复制到目标地址。
也就是说,memcpy函数用来处理不重叠的内存拷贝。
函数原型:

注意事项:
1. 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
2. 这个函数在遇到 '\0' 的时候并不会停下来。
3. 如果source和destination有任何的重叠,复制的结果都是未定义的。
用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>int main() {int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] = { 0 };//将arr1中的内容,拷贝到arr2中memcpy(arr2, arr1, 40);for (int i = 0; i < 20; i++)printf("%d ", arr2[i]);return 0;
}
memcpy的模拟实现
void* my_memcpy(void* dest, const void* src, size_t num) //num单位是字节
{void* ret = dest;assert(src && dest);while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}
3.2 memmove
memmove函数作用是将指定长度的内存块从源地址移动到目标地址,允许源和目标内存块重叠。
也就是说,memmove函数用来处理重叠内存拷贝。
函数原型:

用法示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 + 2, arr1, 20);for (int i = 0; i < 10; i++)printf("%d ", arr1[i]);return 0;
}

memmove的模拟实现:
void* my_memmove(void* dest, const void* src, size_t num) //num单位是字节
{void* ret = dest;assert(dest && src);if (dest < src) //前->后拷贝{while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else //后->前拷贝{while (num--){*((char*)dest+num) = *((char*)src+num);}}return ret;
}
3.3 memset
memset函数作用是将指定长度的内存块填充为指定的值。
函数原型:

用法示例:
示例一:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main()
{int arr[5];memset(arr, 0, sizeof(arr));for (int i = 0; i < 5; i++)printf("%d ", arr[i]);return 0;
}
数组arr的所有元素都将被设置为0。
示例二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main(){char arr[] = "hello world";memset(arr + 1, 'x', 4); //以字节为单位设置的printf("%s\n", arr);return 0;
}
3.4 memcmp
memcmp的作用是比较两个内存块的内容。
函数原型:

注意事项:
比较从ptr1和ptr2指针开始的num个字节

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>int main(){int arr1[] = { 1,2,1,4,5,6 };int arr2[] = { 1,2,257 };int ret = memcmp(arr1, arr2, 10);printf("%d\n", ret);return 0;
}
3. 总结
到这里,我们就介绍完了C语言中的字符函数,字符串函数和内存函数。有什么问题欢迎在评论区讨论。如果觉得文章有什么不足之处,可以在评论区留言。如果喜欢我的文章,可以点赞收藏哦!
相关文章:
【C语言】字符函数,字符串函数,内存函数
大家好!今天我们来学习C语言中的字符函数,字符串函数和内存函数。 目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 1.2.1 tolower(将大写字母转化为小写字母) 1.2.2 toupper(将小写字母转化为大写字母&…...
Spring MVC:域对象共享数据
Spring MVC 前言域对象共享数据使用 ModelAndView 向 request 域对象中共享数据使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据使用 SesionAttributes 注解向 session 域对象中共享数据使用 Servlet API 向 application 域对象中共享数据 附 前言 在上一章中&…...
Vue框架--Vue中的计算属性
下面,我们来实现一个这样的需求。 实现输入框1和输入框2中文字内容的拼接。...
面试题-React(八):React如何实现插槽?
一、React插槽的概念 插槽是一种让组件变得更加灵活和可复用的技术。它允许我们在组件内部预留一些位置,然后在组件使用时填充这些位置,实现外部内容的嵌套。 二、实现React插槽的方法 在React中,实现插槽可以通过两种方式:pro…...
【前端demo】动态赋值CSS
文章目录 效果过程html实现oninput与onchange事件统一配置CSS 代码HTMLCSSJS 其他demo 效果 动态显示CSS样式,由:root统一配置。 效果预览:https://codepen.io/karshey/pen/BavLrwy 参考: Dynamic CSS Variables(codepen.io) 漫谈document…...
BlockUI专栏目录
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C-CSDN博客 简介: BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际…...
K8S获取连接token
1、创建一个具有管理员权限的账户 下载或拷贝文件到主机上,vi k8s-admin.yml --- apiVersion: v1 kind: ServiceAccount metadata:name: dashboard-adminnamespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 met…...
CountDownLatch原理-(主线程等待子线程结束再执行)
CountDownLatch是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用countDown方法时,其实使用了tryReleaseShared方法以CAS的操作来减少state,直至state为0就代表所有的线程都调用了countDown方法。当调用await方法的时候,如果state不为0࿰…...
mybatis源码学习-3-解析器模块
写在前面,这里会有很多借鉴的内容,有以下三个原因 本博客只是作为本人学习记录并用以分享,并不是专业的技术型博客笔者是位刚刚开始尝试阅读源码的人,对源码的阅读流程乃至整体架构并不熟悉,观看他人博客可以帮助我快速入门如果只是笔者自己观看,难免会有很多弄不懂乃至理解错误…...
解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题
recycle-view是微信小程序官方推出的一个经过优化的长列表组件,但是在使用百分比单位控制高宽时有个内容溢出问题,虽然它提供了height和width的参数可以设置宽高,但每次写列表都需要去js里获取宽高并设置是较为麻烦的,所以现在来着…...
如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点: 检测当前环境是否符合演练预设条件(演练准入); 业务流量是否满…...
在 Node.js 中使用 MongoDB 事务
MongoDB事务 事务介绍 在 MongoDB 中,对单个文档的操作是原子的。由于您可以使用嵌入的文档和数组来捕获单个文档结构中的数据之间的关系,而不是跨多个文档和集合进行规范化,因此这种单一文档的原子性消除了对多文档的需求许多实际用例的事务…...
IntelliJ IDEA的远程开发(Remote Development)
DEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发操作即可,官方给出的逻辑图如下,可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…...
网络安全-信息收集简介
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 什么是信息收集 信息收集是指通过各种方式获取所需要的信息,以便我们在后续的渗透过程更好的…...
页面页脚部分CSS分享
先看效果: CSS部分:(查看更多) <style>body {display: grid;grid-template-rows: 1fr 10rem auto;grid-template-areas: "main" "." "footer";overflow-x: hidden;background: #F5F7FA;min…...
微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽
微信小程序文档 - slots介绍 由上述文档看俩来,微信小程序官方并没有提及动态插槽内容。 uniapp文档 - slots介绍 uni官方也未提及关于动态插槽的内容 在实际使用中,直接通过 <<slot :name"item.xxx" /> 这种形式会报错ÿ…...
l8-d6 socket套接字及TCP的实现框架
一、socket套接字 /*创建套接字*/ int socket(int domain, int type, int protocol); /*绑定通信结构体*/ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); /*监听套接字*/ int listen(int sockfd, int backlog); /*处理客户端发起的连接࿰…...
ChatGPT AIGC 完成动态堆积面积图实例
先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…...
虹科产线实时数采检测方案——高速采集助力智能化升级
01 产线数采检测相关技术背景 1.1 典型场景 对于产线数采检测,让我们从典型的工厂场景开始介绍。 每个工位都有上位机监控下方的PLC控制器。指令、执行单元和作用对象的状态通过内置传感器进行采集和测量,反馈给PLC实现闭环控制。 工业4.0和智能制…...
用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI
本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\07”目录下,如下图所示: 在计算机的色彩图像中存有三个通道,即 BGR 通道,根据三个颜色通道的亮度值来显示出不同的颜色&…...
AI辅助开发:让快马AI成为你的编程搭档,迭代优化openclaw风格代码
今天想和大家分享一个开发小技巧:如何用AI辅助工具快速迭代优化代码。最近我在做一个数据抓取的小项目,需要实现类似openclaw的功能,正好用InsCode(快马)平台的AI功能试了试,效果出乎意料的好。 基础功能实现 最开始我只需要一个简…...
终极GoogleTest死亡测试指南:如何轻松掌握程序异常退出测试技巧
终极GoogleTest死亡测试指南:如何轻松掌握程序异常退出测试技巧 【免费下载链接】googletest GoogleTest - Google Testing and Mocking Framework 项目地址: https://gitcode.com/GitHub_Trending/go/googletest GoogleTest(Google Testing and …...
语燕输入法YuyanIme构建与部署完整教程
语燕输入法YuyanIme构建与部署完整教程 【免费下载链接】YuyanIme 语燕输入法-一款基于Rime定制开发的九键、全拼、双拼、手写、火星文等方案、支持悬浮、单手、数字行等键盘模式的中文输入法 项目地址: https://gitcode.com/gh_mirrors/yu/YuyanIme 语燕输入法YuyanIme…...
Kook Zimage真实幻想Turbo常见问题解决:生成全黑图?显存不足?看这篇就够了
Kook Zimage真实幻想Turbo常见问题解决:生成全黑图?显存不足?看这篇就够了 你是不是已经迫不及待地部署好了Kook Zimage真实幻想Turbo,准备大展身手创作奇幻大片,结果一运行,要么生成一张全黑的图片&#…...
Jenkins页面加载慢到怀疑人生?别急着重启,先检查这个Dark Theme插件
Jenkins页面加载缓慢的深度排查:从Dark Theme插件到系统优化 最近在虚拟机环境中使用Jenkins时,突然发现页面加载速度从原先的1秒内变成了10秒以上。这种变化并非渐进式的,而是某天突然出现的。页面功能一切正常,但每次跳转都需要…...
3秒定位文件:Linux文件搜索效率提升10倍的秘密武器
3秒定位文件:Linux文件搜索效率提升10倍的秘密武器 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 在Linux系统中,文件搜索往往是效率瓶颈的重…...
WRF和WPS模型在Ubuntu系统上的安装与常见问题解决指南
1. WRF和WPS模型简介 WRF(Weather Research and Forecasting)模型是一个广泛应用于气象研究和业务预报的中尺度数值天气预报系统。它由美国国家大气研究中心(NCAR)等多个机构联合开发,能够模拟从全球尺度到云尺度的各种…...
工业五官:04 电感、电容、光电、超声波:谁才是工厂最强“探测四兄弟”?
04 电感、电容、光电、超声波:谁才是工厂最强“探测四兄弟”? 今天聊位置和接近传感器——就是专门干“有没有东西”“靠没靠近”“到了没”这仨活儿的。工厂里,传送带上零件一过,机械手一抓,门一开一关,全靠这四兄弟瞪大眼睛盯着。它们不吹牛,不睡觉,比你家看门狗靠谱…...
黑丝空姐-造相Z-Turbo入门:Git版本控制下的模型项目管理
黑丝空姐-造相Z-Turbo入门:Git版本控制下的模型项目管理 你是不是也遇到过这种情况?团队里几个人一起调一个AI模型,今天你改了下提示词,明天他更新了模型参数,结果谁也不知道哪个版本的效果最好。或者,辛辛…...
AI专著写作工具盘点,快速生成、润色,满足你的所有需求
学术专著创作:在深度与广度间寻求平衡及AI工具助力 撰写学术专著时,我们必须在“内容深度”与“覆盖广度”之间寻求一种理想的平衡,这也是许多研究者面临的一个挑战。从深度的角度来看,AI写专著需要具备扎实的学术基础࿰…...











