C语言 标准I/O函数全面指南
C标准I/O函数全面指南
本指南详细介绍了C语言中用于文件操作的标准输入/输出函数,包括单字符I/O、字符串I/O、格式化I/O、块I/O以及文件光标操作。每个部分包含函数定义、使用说明和实用示例,适合学习、复习以及博客发布。内容采用清晰的Markdown格式,代码规范,包含详细注释和最佳实践(如错误处理),以提升可读性和实用性。
1. 单字符读写:fputc
和 fgetc
函数定义
-
fgetc
#include <stdio.h> int fgetc(FILE *stream);
- 功能:从指定文件中读取一个字符,并以无符号整数形式返回。
- 参数:
stream
- 文件指针。 - 返回值:
- 成功:返回读取的字符(无符号整数形式)。
- 失败:返回
EOF
并设置错误码。
-
fputc
#include <stdio.h> int fputc(int c, FILE *stream);
- 功能:将指定字符
c
写入到文件指针stream
指向的文件中。 - 参数:
c
:要写入的字符(以无符号整数形式传递)。stream
:文件指针。
- 返回值:
- 成功:返回写入的字符(无符号整数形式)。
- 失败:返回
EOF
并设置错误码。
- 功能:将指定字符
示例代码
以下示例展示如何使用fputc
写入字符到文件,并用fgetc
读取文件内容。
#include <stdio.h>int main() {// 定义文件指针FILE *fp = NULL;// 以只写模式打开文件if ((fp = fopen("file.txt", "w")) == NULL) {perror("fopen error");return -1;}// 写入字符串 "Hello",每次写入一个字符fputc('H', fp);fputc('e', fp);fputc('l', fp);fputc('l', fp);fputc('o', fp);fclose(fp); // 关闭文件// 以只读模式重新打开文件if ((fp = fopen("file.txt", "r")) == NULL) {perror("fopen error");return -1;}// 逐字符读取并打印char ch;while ((ch = fgetc(fp)) != EOF) {printf("%c ", ch);}fclose(fp); // 关闭文件return 0;
}
说明
- 写入:
fputc
每次写入一个字符,文件光标自动向后移动。 - 读取:
fgetc
每次读取一个字符,遇到文件末尾返回EOF
。 - 注意:写入后光标位于文件末尾,直接读取会失败,因此需重新打开文件或使用
rewind
重置光标。
2. 字符串读写:fgets
和 fputs
函数定义
-
fputs
#include <stdio.h> int fputs(const char *s, FILE *stream);
- 功能:将字符串
s
写入到文件指针stream
指向的文件中(不包含字符串结束符\0
)。 - 参数:
s
:要写入的字符串。stream
:文件指针。
- 返回值:
- 成功:返回写入的字符数(非负数)。
- 失败:返回
EOF
。
- 功能:将字符串
-
fgets
#include <stdio.h> char *fgets(char *s, int size, FILE *stream);
- 功能:从文件指针
stream
指向的文件中读取最多size-1
个字符到数组s
,遇到换行符或文件末尾停止,并在末尾自动添加\0
。 - 参数:
s
:存储读取数据的字符数组。size
:最多读取的字符数(包含末尾\0
)。stream
:文件指针。
- 返回值:
- 成功:返回
s
(字符数组起始地址)。 - 失败或文件末尾:返回
NULL
。
- 成功:返回
- 功能:从文件指针
示例代码
以下示例展示如何从终端输入字符串并写入文件,再从文件中读取并显示。
#include <stdio.h>
#include <string.h>int main() {// 定义文件指针FILE *fp = NULL;// 以只写模式打开文件if ((fp = fopen("file.txt", "w")) == NULL) {perror("fopen error");return -1;}// 从终端输入字符串并写入文件char wbuf[128];while (1) {printf("请输入字符串(输入quit退出):");fgets(wbuf, sizeof(wbuf), stdin); // 从标准输入读取wbuf[strcspn(wbuf, "\n")] = '\0'; // 移除换行符if (strcmp(wbuf, "quit") == 0) {break;}fputs(wbuf, fp); // 写入字符串fputc('\n', fp); // 添加换行符}fclose(fp);// 以只读模式打开文件if ((fp = fopen("file.txt", "r")) == NULL) {perror("fopen error");return -1;}// 逐行读取并打印char rbuf[128];while (fgets(rbuf, sizeof(rbuf), fp) != NULL) {printf("读取到:%s", rbuf);}fclose(fp);return 0;
}
说明
- 写入:
fputs
写入字符串,不包括\0
,需手动添加换行符以分隔行。 - 读取:
fgets
读取一行(包含换行符),自动添加\0
,适合逐行处理文本文件。 - 注意:
fgets
会保留输入的换行符,需用strcspn
或类似方法移除。
3. 格式化读写:fprintf
和 fscanf
函数定义
-
fprintf
#include <stdio.h> int fprintf(FILE *stream, const char *format, ...);
- 功能:按指定格式将数据写入文件。
- 参数:
stream
:文件指针(可为stdout
或stderr
)。format
:格式化字符串,包含格式控制符(如%d
、%s
、%f
、%lf
)。...
:可变参数,数量由格式控制符决定。
- 返回值:
- 成功:返回写入的字符数。
- 失败:返回负数。
-
fscanf
#include <stdio.h> int fscanf(FILE *stream, const char *format, ...);
- 功能:按指定格式从文件中读取数据到变量中。
- 参数:
stream
:文件指针(可为stdin
)。format
:格式化字符串,包含格式控制符。...
:变量地址列表,数量由格式控制符决定。
- 返回值:
- 成功:返回成功读取的项数。
- 失败或文件末尾:返回
EOF
并设置错误码。
示例代码
以下示例展示格式化读写到标准输出/输入和外部文件。
#include <stdio.h>int main() {// 向标准输出写入格式化数据fprintf(stdout, "整数: %d, 小数: %.2f, 字符串: %s\n", 520, 3.14, "I Love C");// 从标准输入读取整数int num;printf("请输入一个整数:");if (fscanf(stdin, "%d", &num) == 1) {printf("读取到:%d\n", num);} else {printf("读取失败\n");}// 写入格式化数据到文件FILE *fp = NULL;if ((fp = fopen("usr.txt", "w")) == NULL) {perror("fopen error");return -1;}fprintf(fp, "%s %d", "admin", 123456); // 写入用户名和密码fclose(fp);// 从文件中读取格式化数据if ((fp = fopen("usr.txt", "r")) == NULL) {perror("fopen error");return -1;}char usrName[20];int pwd;if (fscanf(fp, "%s %d", usrName, &pwd) == 2) {printf("用户名: %s, 密码: %d\n", usrName, pwd);} else {printf("读取失败\n");}fclose(fp);return 0;
}
说明
- 格式化:
fprintf
和fscanf
支持多种数据类型(如整数、浮点数、字符串),灵活性高。 - 标准I/O:使用
stdout
或stdin
可直接操作终端输入输出。 - 注意:
fscanf
读取时需确保变量地址正确,格式匹配,否则可能导致错误。
4. 格式串转字符串:sprintf
和 snprintf
函数定义
-
sprintf
#include <stdio.h> int sprintf(char *str, const char *format, ...);
- 功能:将格式化数据转换为字符串,存储到字符数组
str
中。 - 参数:
str
:目标字符数组。format
:格式化字符串。...
:可变参数。
- 返回值:
- 成功:返回转换的字符数(不含
\0
)。 - 失败:返回
EOF
。
- 成功:返回转换的字符数(不含
- 功能:将格式化数据转换为字符串,存储到字符数组
-
snprintf
#include <stdio.h> int snprintf(char *str, size_t size, const char *format, ...);
- 功能:将格式化数据转换为字符串,最多存储
size-1
个字符到str
,并添加\0
。 - 参数:
str
:目标字符数组。size
:最大存储字符数(含\0
)。format
:格式化字符串。...
:可变参数。
- 返回值:
- 成功:返回应写入的字符数(不含
\0
)。 - 如果超出
size
:返回应写入的字符数(但只写入size-1
个字符)。 - 失败:返回
EOF
。
- 成功:返回应写入的字符数(不含
- 功能:将格式化数据转换为字符串,最多存储
示例代码
以下示例展示如何将多种数据类型组合成字符串。
#include <stdio.h>int main() {char buf[20];// 使用 sprintf(不安全,可能溢出)sprintf(buf, "%d %s %.1f", 1001, "zhangsan", 99.5);printf("sprintf结果: %s\n", buf);// 使用 snprintf(安全,限制长度)snprintf(buf, sizeof(buf), "%d %s %.1f", 1001, "zhangsan", 99.5);printf("snprintf结果: %s\n", buf);return 0;
}
说明
- 安全性:
sprintf
可能导致缓冲区溢出,推荐使用snprintf
以限制写入长度。 - 用途:常用于将多种数据类型组合成字符串,便于后续处理或输出。
- 注意:确保
buf
大小足够容纳格式化结果,snprintf
更适合现代编程。
5. 模块化读写:fread
和 fwrite
函数定义
-
fread
#include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:从文件读取
nmemb
项数据,每项大小为size
字节,存储到ptr
指向的内存。 - 参数:
ptr
:存储数据的内存地址(支持任意类型)。size
:每项数据的大小(字节)。nmemb
:读取的项数。stream
:文件指针。
- 返回值:
- 成功:返回实际读取的项数。
- 失败或文件末尾:返回小于
nmemb
的值或0。
- 功能:从文件读取
-
fwrite
#include <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:将
ptr
指向的nmemb
项数据(每项size
字节)写入文件。 - 参数:
ptr
:要写入的数据地址。size
:每项数据的大小(字节)。nmemb
:写入的项数。stream
:文件指针。
- 返回值:
- 成功:返回实际写入的项数。
- 失败:返回小于
nmemb
的值或0。
- 功能:将
示例代码
字符串读写
#include <stdio.h>
#include <string.h>int main() {FILE *fp = NULL;// 以只写模式打开文件if ((fp = fopen("test.txt", "w")) == NULL) {perror("fopen error");return -1;}// 循环输入字符串并写入char wbuf[128];while (1) {printf("请输入字符串(输入quit退出):");fgets(wbuf, sizeof(wbuf), stdin);wbuf[strcspn(wbuf, "\n")] = '\0';if (strcmp(wbuf, "quit") == 0) {break;}fwrite(wbuf, strlen(wbuf), 1, fp); // 写入字符串fwrite("\n", 1, 1, fp); // 添加换行fflush(fp); // 刷新缓冲区}fclose(fp);// 以只读模式打开文件if ((fp = fopen("test.txt", "r")) == NULL) {perror("fopen error");return -1;}// 读取并输出char rbuf[10];size_t res;while ((res = fread(rbuf, 1, sizeof(rbuf) - 1, fp)) > 0) {rbuf[res] = '\0'; // 添加结束符fwrite(rbuf, 1, res, stdout); // 输出到终端}fclose(fp);return 0;
}
整数读写
#include <stdio.h>int main() {FILE *fp = NULL;// 以只写模式打开文件if ((fp = fopen("test.txt", "w")) == NULL) {perror("fopen error");return -1;}// 写入整数int num = 16;fwrite(&num, sizeof(int), 1, fp);fclose(fp);// 以只读模式打开文件if ((fp = fopen("test.txt", "r")) == NULL) {perror("fopen error");return -1;}// 读取整数int key;if (fread(&key, sizeof(int), 1, fp) == 1) {printf("读取到: %d\n", key);} else {printf("读取失败\n");}fclose(fp);return 0;
}
结构体读写
#include <stdio.h>
#include <string.h>typedef struct {char name[20];int age;double score;
} Stu;int main() {FILE *fp = NULL;// 以只写模式打开文件if ((fp = fopen("test.txt", "w")) == NULL) {perror("fopen error");return -1;}// 定义并写入学生数据Stu students[] = {{"张三", 18, 98.0},{"李四", 20, 88.0},{"王五", 16, 95.0}};fwrite(students, sizeof(Stu), 3, fp);fclose(fp);// 以只读模式打开文件if ((fp = fopen("test.txt", "r")) == NULL) {perror("fopen error");return -1;}// 读取并显示一个学生信息Stu temp;if (fread(&temp, sizeof(Stu), 1, fp) == 1) {printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", temp.name, temp.age, temp.score);}fclose(fp);return 0;
}
说明
- 灵活性:
fread
和fwrite
支持任意数据类型(如字符串、整数、结构体),适合二进制文件操作。 - 注意:二进制读写需确保数据结构对齐一致,跨平台时需考虑字节序。
6. 文件光标操作:fseek
, ftell
, rewind
函数定义
-
fseek
#include <stdio.h> int fseek(FILE *stream, long offset, int whence);
- 功能:移动文件光标到指定位置。
- 参数:
stream
:文件指针。offset
:偏移量(正:向后,负:向前,0:不动)。whence
:起始位置(SEEK_SET
:文件开头,SEEK_CUR
:当前位置,SEEK_END
:文件末尾)。
- 返回值:
- 成功:返回0。
- 失败:返回-1并设置错误码。
-
ftell
#include <stdio.h> long ftell(FILE *stream);
- 功能:获取文件光标的当前偏移量(相对于文件开头)。
- 参数:
stream
- 文件指针。 - 返回值:
- 成功:返回当前偏移量(字节)。
- 失败:返回-1并设置错误码。
-
rewind
#include <stdio.h> void rewind(FILE *stream);
- 功能:将文件光标重置到文件开头(等效于
fseek(stream, 0, SEEK_SET)
)。 - 参数:
stream
- 文件指针。 - 返回值:无。
- 功能:将文件光标重置到文件开头(等效于
示例代码
以下示例展示如何操作文件光标并读取特定位置的数据。
#include <stdio.h>
#include <string.h>typedef struct {char name[20];int age;double score;
} Stu;int main() {FILE *fp = NULL;// 以读写模式打开文件if ((fp = fopen("test.txt", "w+")) == NULL) {perror("fopen error");return -1;}// 写入三个学生数据Stu students[] = {{"张三", 18, 98.0},{"李四", 20, 88.0},{"王五", 16, 95.0}};fwrite(students, sizeof(Stu), 3, fp);// 获取文件大小fseek(fp, 0, SEEK_END);printf("文件大小: %ld 字节\n", ftell(fp));// 移动光标到第二个学生fseek(fp, sizeof(Stu), SEEK_SET);// 读取并显示第二个学生信息Stu temp;if (fread(&temp, sizeof(Stu), 1, fp) == 1) {printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", temp.name, temp.age, temp.score);}fclose(fp);return 0;
}
说明
- 光标操作:
fseek
灵活控制文件读取位置,ftell
可用于计算文件大小。 - 重置光标:
rewind
适合在同一文件流中从头重新读取。 - 注意:二进制文件操作时,偏移量需与数据结构大小对齐。
总结与注意事项
- 文件操作流程:始终检查
fopen
返回值,确保文件打开成功;操作完成后使用fclose
关闭文件。 - 错误处理:使用
perror
或检查返回值捕获错误,确保程序健壮性。 - 缓冲区管理:写入数据后可用
fflush
刷新缓冲区,确保数据及时写入。 - 安全性:优先使用
snprintf
而非sprintf
,避免缓冲区溢出。 - 跨平台注意:二进制文件读写需考虑字节序和结构体对齐问题。
相关文章:
C语言 标准I/O函数全面指南
C标准I/O函数全面指南 本指南详细介绍了C语言中用于文件操作的标准输入/输出函数,包括单字符I/O、字符串I/O、格式化I/O、块I/O以及文件光标操作。每个部分包含函数定义、使用说明和实用示例,适合学习、复习以及博客发布。内容采用清晰的Markdown格式&a…...

el-select 实现分页加载,切换也数滚回到顶部,自定义高度
el-select 实现分页加载,切换也数滚回到顶部,自定义高度 1.html <el-form-item label"俱乐部:" prop"club_id" label-width"120px"><el-select :disabled"Boolean(match_id)" style"w…...

Langchaine4j 流式输出 (6)
Langchaine4j 流式输出 大模型的流式输出是指大模型在生成文本或其他类型的数据时,不是等到整个生成过程完成后再一次性 返回所有内容,而是生成一部分就立即发送一部分给用户或下游系统,以逐步、逐块的方式返回结果。 这样,用户…...
Jenkins:自动化流水线的基石,开启 DevOps 新时代
从持续集成到持续交付的全流程自动化工具 一、什么是 Jenkins? Jenkins 是一款开源的 自动化服务器,专注于持续集成(CI)和持续交付(CD)。它通过插件化的架构支持几乎所有的开发、运维和测试工具ÿ…...

学习经验分享【40】目标检测热力图制作
目标检测热力图在学术论文(尤其是计算机视觉、深度学习领域)中是重要的可视化分析工具和论证辅助手段,可以给论文加分不少。主要作用一是增强论文的可解释性与说服力:论文中常需解释模型 “如何” 或 “为何” 检测到目标…...

C#里与嵌入式系统W5500网络通讯(3)
有与W5500通讯时,需要使用下面的寄存器: PHYCFGR (W5500 PHY Configuration Register) [R/W] [0x002E] [0b10111XXX] PHYCFGR configures PHY operation mode and resets PHY. In addition, PHYCFGR indicates the status of PHY such as duplex, Speed, Link. 这张表格详细…...

用OpenNI2获取奥比中光Astra Pro输出的深度图(win,linux arm64 x64平台)
搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 (香橙派,ubuntu2404,debian)上获取深度信息,之前的驱动下载已经不好用了,参考如下 Astra 3D相机选型建议 - 知乎https://zhuanlan.zhihu.com/p/594485674 …...

Unity VR/MR开发-VR设备与适用场景分析
视频讲解链接:【XR马斯维】VR/MR设备与适用场景分析?【UnityVR/MR开发教程--入门】_游戏热门视频...

Linux: network: switch:arp cache更新规则 [chatGPT]
文章目录 介绍概念普通包带有不同的mac,是否更新arp cache?普通包带有相同的mac,是否刷新 aging timeswitch是否会主动学习介绍 关于arp cache在switch侧的行为。有很多问题需要理解。 概念 HP L3 - IP Services Configuration Guide 文档里有写:dynamic arp entry的解说…...

Java网络编程API 1
Java中的网络编程API一共有两套:一套是UDP协议使用的API;另一套是TCP协议使用的API。这篇文章我们先来介绍UDP版本的API,并尝试来写一个回显服务器(接收到的请求是什么,返回的响应就是什么)。 UDP数据报套…...
Android协程学习
目录 Android上的Kotlin协程介绍基本概念与简单使用示例协程的高级用法 结构化并发线程调度器(Dispatchers)自定义调度器并发:同步 vs 异步 异步并发(async 并行执行)同步顺序执行协程取消与超时 取消机制超时控制异步数据流 Flow协程间通信 使用 Channel使用 StateFlow /…...
Angular报错:cann‘t bind to ngClass since it is‘t a known property of div
遇到的错误: Cant bind to ngClass since it isnt a known property of div这个错误是 Angular 中 最常见的模板编译错误之一,通常出现在你试图使用 ngClass 指令,但 Angular 没有识别它的情况下。 ✅ 错误的根本原因 Angular 不知道 ngCla…...
uniapp+vue3实现CK通信协议(基于jjc-tcpTools)
1. TCP 服务封装 (tcpService.js) export class TcpService {constructor() {this.connections uni.requireNativePlugin(jjc-tcpTools)this.clients new Map() // 存储客户端连接this.servers new Map() // 存储服务端实例}// 创建 TCP 服务端 (字符串模式)createStringSe…...
Python爬虫实战:研究urlparse库相关技术
1 引言 1.1 研究背景与意义 网络爬虫作为互联网数据采集的核心技术,在信息检索、舆情分析、数据挖掘等领域具有广泛应用。随着 Web 技术的发展,现代网站 URL 结构日益复杂,包含路径参数、查询参数、锚点等多种组件,且存在相对路径、URL 编码等问题,给爬虫开发带来了挑战…...
解锁FastAPI与MongoDB聚合管道的性能奥秘
title: 解锁FastAPI与MongoDB聚合管道的性能奥秘 date: 2025/05/20 20:24:47 updated: 2025/05/20 20:24:47 author: cmdragon excerpt: MongoDB聚合管道是一种分阶段处理数据的流水线,通过$match、$group等阶段对文档进行特定操作,具有内存优化和原生操…...
软件工程方法论:在确定性与不确定性的永恒之舞中寻找平衡
更多精彩请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎-CSDN博客 当我们谈论“软件工程”时,“工程”二字总暗示着某种如桥梁建造般的精确与可控。然而,软件的本质却根植于人类思维的复杂性与需求的流变之中。软件工程方法论的…...
Unity中的MonoSingleton<T>与Singleton<T>
1.MonoSingleton 代码部分 using UnityEngine;/// <summary> /// MonoBehaviour单例基类 /// 需要挂载到GameObject上使用 /// </summary> public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {private static T _instance;…...
怎么通过 jvmti 去 hook java 层函数
使用 JVMTI 手动实现 Android Java 函数 Hook 要通过 JVMTI 手动实现 Android Java 函数 Hook,需要编写 Native 层代码并注入到目标进程中。以下是详细步骤和示例: 一、核心实现原理 JVMTI 提供两种主要 Hook 方式: Method Entry/Exit 事…...

兰亭妙微 | 医疗软件的界面设计能有多专业?
从医疗影像系统到手术机器人控制界面,从便携式病原体检测设备到多平台协同操作系统,兰亭妙微为众多医疗设备研发企业,打造了兼具专业性与可用性的交互界面方案。 我们不仅做设计,更深入理解医疗场景的实际需求: 对精…...

前端原生构建交互式进度步骤组件(Progress Steps)
在现代网页设计中,进度步骤(Progress Steps) 是一种常见的 UI 模式,常用于引导用户完成注册流程、多步表单、教程或任何需要分步骤操作的场景。本文将带你从零开始构建一个美观且功能完整的 “进度步骤”组件,并详细讲…...
如何给windos11 扩大C盘容量
动不动C盘就慢了,苹果逼着用户换手机,三天两头更新系统,微软也是毫不手软。c盘 从10个G就够用,到100G 也不够,看来通货膨胀是部分行业的。 在 Windows 11 中扩大 C 盘容量,主要取决于磁盘分区布局和可用空…...

【基于阿里云搭建数据仓库(离线)】Data Studio创建资源与函数
Data Studio支持在您的数据分析代码中引用自定义的资源和函数(支持MaxCompute、EMR、CDH、Flink),您需要先创建或上传资源、函数至目标工作空间,上传后才可在该工作空间的任务中使用。您可参考本文了解如何使用DataWorks可视化方式…...
Linux_T(Sticky Bit)粘滞位详解
Linux 粘滞位(Sticky Bit)详解 一、什么是粘滞位(Sticky Bit) 粘滞位(Sticky Bit)是 Linux 和 Unix 系统中一种特殊的权限设置,主要应用于目录,其作用是在多人共享访问的目录中&am…...

web3-以太坊智能合约基础(理解智能合约Solidity)
以太坊智能合约基础(理解智能合约/Solidity) 无需编程经验,也可以帮助你了解Solidity独特的部分;如果本身就有相应的编程经验如java,python等那么学起来也会非常的轻松 一、Solidity和EVM字节码 实际上以太坊链上储存…...
高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
如果你正在开发一款涉及支付、隐私数据或企业内部使用的 App,那么你可能比多数开发者更早意识到一件事——App 一旦被破解,损失的不只是代码,还有信任与业务逻辑。 在我们为金融类工具、HR 系统 App、数据同步组件等高敏感项目提供支持的过程…...

【C++项目】负载均衡在线OJ系统-2
文章目录 oj_server模块编写oj_server框架的搭建-oj_server/oj_server.cpp 路由框架 oj_model模块编写题目信息设置v1.文件版本-common/util.hpp boost库spilt函数的使用-oj_server/oj_model_file.hpp 文件版本model编写v2.mysql数据库版本1.mysql创建授权用户、建库建表录入操…...

GC1809:高性能24bit/192kHz音频接收芯片解析
1. 芯片概述 GC1809 是数字音频接收芯片,支持IEC60958、S/PDIF、AES3等协议,集成8选1输入切换、低抖动时钟恢复和24bit DAC,适用于家庭影院、汽车音响等高保真场景。 核心特性 高精度:24bit分辨率,动态范围105dB&…...

2025年06月05日Github流行趋势
项目名称:onlook 项目地址url:https://github.com/onlook-dev/onlook项目语言:TypeScript历史star数:16165今日star数:1757项目维护者:Kitenite, drfarrell, spartan-vutrannguyen, apps/devin-ai-integrat…...
flask功能使用总结和完整示例
Flask 功能使用总结与完整示例 一、Flask 核心功能总结 Flask 是轻量级 Web 框架,核心功能包括: 路由系统:通过 app.route 装饰器定义 URL 与函数的映射。模板引擎:默认使用 Jinja2,支持动态渲染 HTML。请求处理&…...
AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用
自己踩过坑不想别人也踩坑了 亚马逊S3存储桶直传前端demo复制即可使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0…...