fscanf
与 fprintf
的区别
函数 | 用途 | 示例 |
---|---|---|
fscanf |
从文件中读取格式化数据 | fscanf(fp, "记录数: %d\n", &count); |
fprintf |
向文件中写入格式化数据 | fprintf(fp, "记录数: %d\n", count); |
在读取或写入文件时,fscanf 和 fprintf 的功能是通过指定格式化字符串来解析或生成数据。它们的行为完全取决于格式化字符串的定义。 |
如何跳过中文字符
中文字符在 fscanf
或 fprintf
中只被视为普通的文本。只要格式化字符串不尝试解析这些文本,它们就会被跳过或按字面意义写入文件。
fscanf
的行为
对于你提供的记录格式,可以使用以下格式化字符串来读取记录,同时跳过中文描述:
c
Copy code
FILE *fp = fopen("c:/zymdata1.txt", "r"); if (fp == NULL) { printf("文件打开失败!\n"); return -1; } // 读取记录数 int record_count; fscanf(fp, "记录数: %d\n", &record_count); rec_table.count = record_count; // 读取每条记录 for (int i = 0; i < record_count; i++) { Student *s = &rec_table.students[i]; fscanf(fp, "ID: %d, 班级: %d, 姓名: %[^,], 开始时间: %02d:%02d, 费用: %f\n", &s->id, &s->class, s->name, &s->start_time.hour, &s->start_time.minute, &s->cost); } fclose(fp);
解析关键点:
-
跳过中文描述:
fscanf(fp, "记录数: %d\n", &record_count);
会读取记录数:
和后面的数字,中文部分被直接跳过,因为格式化字符串没有明确读取它。
-
读取每条记录:
- 使用
%d
读取ID
和班级
。 - 使用
%[^,]
读取到逗号前的所有字符作为姓名
。 - 使用
%02d:%02d
读取开始时间
的小时和分钟。 - 使用
%f
读取费用
。
- 使用
fprintf
的行为
将数据写入文件时,可以使用类似的格式化字符串:
c
Copy code
FILE *fp = fopen("c:/zymdata1.txt", "w"); if (fp == NULL) { printf("文件保存失败!\n"); return -1; } // 写入记录数 fprintf(fp, "记录数: %d\n", rec_table.count); // 写入每条记录 for (int i = 0; i < rec_table.count; i++) { Student *s = &rec_table.students[i]; fprintf(fp, "ID: %d, 班级: %d, 姓名: %s, 开始时间: %02d:%02d, 费用: %.2f\n", s->id, s->class, s->name, s->start_time.hour, s->start_time.minute, s->cost); } fclose(fp);
lab1 Wireshark_Intro_v7.0
While Wireshark is running, enter the URL:
http://gaia.cs.umass.edu/wireshark-labs/INTRO-wireshark-file1.html
and have that page displayed in your browser. In order to display this page, your
browser will contact the HTTP server at gaia.cs.umass.edu and exchange HTTP
messages with the server in order to download this page, as discussed in section
2.2 of the text. The Ethernet frames containing these HTTP messages (as well as
all other frames passing through your Ethernet adapter) will be captured by
Wireshark.
最开始搜不到http。发现是问题:
2. 使用了 HTTPS
- 如果 URL 使用的是 HTTPS 协议,而不是 HTTP,数据被加密,Wireshark 无法直接查看 GET 请求。
- 解决方法:
- 确认访问的 URL 是
http://gaia.cs.umass.edu/...
,而不是https://...
。 - 如果网站重定向到 HTTPS,请暂时关闭浏览器的“强制 HTTPS”选项,或使用支持 HTTP 的服务器地址。”
- 确认访问的 URL 是
https和http区别
|特性|HTTP|HTTPS|
全称 | Hypertext Transfer Protocol | Hypertext Transfer Protocol Secure |
数据加密 | 数据明文传输,容易被拦截和篡改 | 数据通过 SSL/TLS 加密,确保隐私和数据完整性 |
安全性 | 不安全,可能会泄露敏感信息 | 安全,数据被加密且身份认证防止中间人攻击 |
端口号 | 默认使用端口 80 | 默认使用端口 443 |
证书需求 | 不需要证书 | 需要服务器配置 SSL/TLS 证书 |
使用场景 | 适用于非敏感数据传输(如公开内容的网站) | 适用于敏感数据传输(如银行、购物、登录页面) |
解决方法 | ||
在 Google Chrome 和 Microsoft Edge 浏览器中,可以通过禁用强制 HTTPS 来访问 HTTP 网站(适用于测试或捕获网络流量)。以下是详细步骤: |
Google Chrome 禁用强制 HTTPS
-
临时方法(针对单个网址):
- 打开 Chrome。
- 在地址栏中输入
chrome://net-internals/#hsts
并按回车。 - 在 "Delete domain security policies"(删除域名安全策略) 部分:
- 在输入框中输入目标网站的域名(如
gaia.cs.umass.edu
)。 - 点击 "Delete"(删除)。
- 在输入框中输入目标网站的域名(如
- 此操作会暂时移除该网站的 HTTPS 强制要求。
-
禁用所有 HTTPS 强制(实验性功能):
- 在地址栏中输入
chrome://flags
。 - 搜索 "HTTPS-First Mode"。
- 将其设置为 "Disabled"(禁用)。
- 重启浏览器。
- 在地址栏中输入
Microsoft Edge 禁用强制 HTTPS
-
临时方法(针对单个网址):
- 打开 Edge。
- 在地址栏中输入
edge://net-internals/#hsts
并按回车。 - 在 "Delete domain security policies"(删除域名安全策略) 部分:
- 在输入框中输入目标网站的域名(如
gaia.cs.umass.edu
)。 - 点击 "Delete"(删除)。
- 在输入框中输入目标网站的域名(如
- Edge 将不再强制该域名使用 HTTPS。
-
禁用所有 HTTPS 强制(实验性功能):
- 在地址栏中输入
edge://flags
。 - 搜索 "Automatic HTTPS"。
- 将其设置为 "Disabled"(禁用)。
- 重启浏览器。
- 在地址栏中输入
问题解决