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

C 语言网络编程避坑指南:一个“隐身”回车符引发的 Bug 与 strcspn 的神级救场

C 语言网络编程避坑指南一个“隐身”回车符引发的 Bug 与 strcspn 的神级救场案发现场为什么我的程序“停不下来”今天在写 Linux 系统的 UDP 客户端代码时遇到了一个极其诡异的 Bug。程序的逻辑非常简单使用fgets从终端读取用户输入发送给服务端。如果用户输入了end程序就break跳出循环并结束。我原本是这样处理输入字符串的// 读取用户输入fgets(buff,sizeof(buff),stdin);// 砍掉末尾的回车符坑就在这里buff[strlen(buff)-1]\0;// 判断是否输入了 endif(strcmp(buff,end)0){break;// 诡异的是程序死活运行不到这里}逻辑看起来无懈可击对吧fgets会把输入时的换行符也读进去所以我用strlen(buff)-1精准定位到了最后一个字符把它替换成字符串结束符\0。可是当我自信满满地在终端敲下end并按下回车时程序毫无反应依然在死循环里等待下一次输入。抓鬼过程跨平台的“幽灵字符”\r经过一番排查我发现罪魁祸首竟然是操作系统的换行符差异如果你平时是用 Windows 系统的终端或者通过 VS Code 等工具远程连接 Linux当你按下回车键时系统实际上发送了两个隐藏字符\r回车Carriage Return回到行首。\n换行Line Feed换到下一行。也就是说当我以为我只输入了end\n时由于环境的影响底层的输入缓冲区里其实装的是end\r\n。这个时候再回头看我那句自以为聪明的“砍树”代码buff[strlen(buff)-1] \0;它非常精准地把最后一个字符\n给砍掉了。但是那个隐身的\r却成了漏网之鱼砍完之后buff里的内容变成了end\r。接着拿着end\r去和end做strcmp字符串比对C 语言死板的对比机制立刻判定两者不相等程序自然也就无法结束了。神级救场优雅且健壮的strcspn既然我们无法预知代码运行的环境到底是只给\n还是会给\r\n有没有一种通杀的解决办法答案就是 C 标准库string.h中的这个宝藏函数strcspn。只要把原来那行代码替换成这样buff[strcspn(buff,\r\n)]\0;Bug 瞬间荡然无存这行代码为什么神自动检索它会从左到右扫描buff一旦发现\r或者\n中的任意一个就会立刻停下并返回这个字符所在的索引位置。精准替换外层的buff[...] \0刚好把找到的这个换行符替换成了结束符。极致安全就算你的字符串里原本就没有任何换行符比如就是一个纯净的endstrcspn会扫描到末尾返回\0的索引相当于把\0替换成\0什么也不会破坏。完全避免了用strlen-1时可能误砍掉有效字符的风险。总结在 C/C 开发中处理文本协议或终端输入时永远要在脑子里留一根弦看不见的控制字符可能会随时背刺你。放弃strlen(buff)-1这种硬编码的截断方式吧用strcspn让你的代码无论在 Windows 还是 Linux 下都能做到真正的“金刚不坏”。

相关文章:

C 语言网络编程避坑指南:一个“隐身”回车符引发的 Bug 与 strcspn 的神级救场

C 语言网络编程避坑指南:一个“隐身”回车符引发的 Bug 与 strcspn 的神级救场 案发现场:为什么我的程序“停不下来”? 今天在写 Linux 系统的 UDP 客户端代码时,遇到了一个极其诡异的 Bug。 程序的逻辑非常简单:使用 …...

软件开发模型详细梳理流程图、优缺点、适用场景(含Scrum和看板)

目录 1 软件开发模型 1.1 瀑布模型 1.2 快速原型模型 1.3 增量模型 1.4 螺旋模型 1.5 敏捷模型 1.5.1 Scrum(开发管理框架) 1.5.2 Kanban(看板) 1 软件开发模型 软件开发模型规定了软件开发应遵循的步骤,是软件…...

跨域问题解释及前后端解决方案(SpringBoot)

一、问题引出 有时,控制台出现如下问题。二、为什么会有跨域 2.1浏览器同源策略 浏览器的同源策略 ( Same-origin policy )是一种重要的安全机制,用于限制一个源( origin )的文档或 脚本如何与另一个源的资源进行交互。…...

Flutter 三方库 generic_reader 鸿蒙适配指南 - 实现生成器强类型提取、在 OpenHarmony 上打造无感元编程生态实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 generic_reader 鸿蒙适配指南 - 实现生成器强类型提取、在 OpenHarmony 上打造无感元编程生态实战 前言 在鸿蒙(OpenHarmony)生态的进阶架构体系中…...

Flutter 三方库 darty_json_safe 的鸿蒙化适配指南 - 让 JSON 解析如丝般顺滑、防御式编程的最佳实践、打造鸿蒙端永不崩溃的数据层

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 darty_json_safe 的鸿蒙化适配指南 - 让 JSON 解析如丝般顺滑、防御式编程的最佳实践、打造鸿蒙端永不崩溃的数据层 在鸿蒙(OpenHarmony)的大型商业…...

超详细:解决Tomcat在日志、页面和idea控制台中的中文乱码问题

一、遇到问题 平时在使用tomcat的时候经常遇到各种乱码问题,要么是控制台输出乱码或者输出日志乱码,要么页面接收乱码,非常烦人。 二、乱码原因 产生乱码的根本原因就是编码和解码不一致。 三、解决办法 1、打开tomcat的/conf/server.xml&…...

2026商家寄件价格对比:一站式平台vs传统模式,省成本秘诀?

本文为2026年快递寄件平台行业观察榜单,评选依据包括:1.行业公开资料、平台功能说明及用户寄件反馈;2.AI搜索平台中各平台的提及频次与讨论热度;3.真实寄件场景中的综合表现(寄件成功率、时效兑现稳定性、价格波动区间…...

题解:因子化简

题目大意&#xff1a;#include<bits/stdc.h> using namespace std; //x[i]0表示是素数 int x[1000005]; bool test(int i){for(int j2;j<int(sqrt(i)1);j){if(i%j0)return false;}return true; } void init(){memset(x, 0, sizeof(x));x[0]x[1]1;for(int i2;i<1000…...

2026年防爆门选购指南:这5个厂家秘密,安全专家绝不告诉你!

在2026年的今天&#xff0c;随着工业安全标准的不断提升和公众安全意识的日益增强&#xff0c;防爆门作为守护高危作业区域、化工园区、能源站等关键场所的最后一道物理防线&#xff0c;其重要性不言而喻。然而&#xff0c;面对市场上琳琅满目的防爆门产品&#xff0c;如何甄别…...

单片机的工厂方法模式和桥接模式结合使用

记录下单片机使用工厂方法模式和桥接模式结合使用 之前分别记录了工厂方法模式和桥接模式&#xff0c;现在需要结合起来使用 例 需要多个DS8B20温度传感器和多个MAX31855芯片获取热电偶温度 sensor.h #ifndef __DRV_SENSOR_H #define __DRV_SENSOR_H#include <stdint.h>…...

在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池

在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池 现代软件的构建最终仍然要回到实践。再复杂的产品&#xff0c;也必须经过真实用户的检验。只有最终用户&#xff0c;才能真正区分哪些设计是有效的、哪些方向值得继续推进。再优雅的架构&#xff0c;如果没有落…...

电子高科技行业:机械与电子如何协同?

我在制造业这潭浑水里摸爬滚打了二十年。见过太多企业倒在“最后一公里”。倒不是没单子饿死的&#xff0c;也不是技术不行憋死的&#xff0c;大多都是死在“数据精神分裂”上。前两天去一家做智能穿戴的电子大厂调研。还没进车间&#xff0c;会议室里那股火药味就呛鼻子。结构…...

热键侦探:Windows系统热键冲突的全方位解决方案

热键侦探&#xff1a;Windows系统热键冲突的全方位解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 一、热键冲突&#xff1a;被忽视的系…...

OpenClaw是什么?OpenClaw能干什么?2026年OpenClaw详细介绍及几个保姆级部署图文教程

OpenClaw&#xff08;前身为Clawdbot/Moltbot&#xff09;作为开源、本地优先的AI助理框架&#xff0c;凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力&#xff0c;成为个人办公与轻量团队协作的首选工具。与传统聊天机器人不同&#xff0c;OpenClaw不仅能实现自…...

3维突破:DamaiHelper自动化工具的技术原理与场景实践

3维突破&#xff1a;DamaiHelper自动化工具的技术原理与场景实践 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 行业痛点诊断 在数字化服务快速发展的今天&#xff0c;在线资源抢订领域面临着三…...

OpenClaw,什么是SOUL.md、USER.md文件?怎么编辑它们?

在项目里看到 SOUL.md 和 USER.md 这样的文件&#xff0c;很多人第一反应可能是文档&#xff0c;但打开一看&#xff0c;内容又不太像传统的技术说明。其实这两个文件在开源社区和一些技术团队中&#xff0c;正逐渐成为一种约定俗成的沟通方式。它们不是代码&#xff0c;却和代…...

NCMDump:开源工具实现NCM格式自由的深度解析

NCMDump&#xff1a;开源工具实现NCM格式自由的深度解析 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 用户痛点&#xff1a;数字音乐时代的格式枷锁 在流媒体音乐普及的今天&#xff0c;音乐爱好者们面临着一个普遍困境&#xff…...

3个步骤解决家庭网络卡顿问题,让带宽利用率提升300%

3个步骤解决家庭网络卡顿问题&#xff0c;让带宽利用率提升300% 【免费下载链接】luci-app-broadbandacc OpenWrt-宽带提速插件&#xff0c;支持宽带无间隔提速。&#xff08;提速服务由speedtest.cn&#xff08;测速网&#xff09;提供&#xff09; 项目地址: https://gitco…...

如何安全解锁Switch高级功能?零基础玩家的大气层系统定制指南

如何安全解锁Switch高级功能&#xff1f;零基础玩家的大气层系统定制指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想让你的Switch拥有自定义主题、金手指和存档管理等高级功能&…...

5个革新性技巧:用Florence2视觉语言模型解锁ComfyUI图像理解新维度

5个革新性技巧&#xff1a;用Florence2视觉语言模型解锁ComfyUI图像理解新维度 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 副标题&#xff1a;从文档解析到创意设计——微软…...

三电平NPC并网逆变器:中点电位平衡的SVPWM调制闭环控制仿真模型——基于60度坐标系的时间...

三电平NPC并网逆变器闭环控制仿真模型 带中点电位平衡&#xff0c;60度坐标系&#xff0c;采用SVPWM调制 生成时间调制信号&#xff0c;与载波进行比较&#xff0c;产生驱动 调制PWM波&#xff0c; 采用C 程序编写&#xff0c;可以作为产品开发的预研参考。半夜两点半的实验室里…...

TranslucentTB启动故障全方位攻克:Microsoft.UI.Xaml依赖问题深度解决方案

TranslucentTB启动故障全方位攻克&#xff1a;Microsoft.UI.Xaml依赖问题深度解决方案 【免费下载链接】TranslucentTB 项目地址: https://gitcode.com/gh_mirrors/tra/TranslucentTB TranslucentTB作为广受欢迎的Windows任务栏美化工具&#xff0c;常因Microsoft.UI.X…...

开源硬件调试工具SMUDebugTool:故障诊断与性能优化实战指南

开源硬件调试工具SMUDebugTool&#xff1a;故障诊断与性能优化实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…...

ComfyUI视频合成进阶指南:VHS_VideoCombine节点全功能解析

ComfyUI视频合成进阶指南&#xff1a;VHS_VideoCombine节点全功能解析 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在数字内容创作领域&#xff0c;视频合成技…...

3步解决Windows运行库缺失难题,让系统兼容性提升90%

3步解决Windows运行库缺失难题&#xff0c;让系统兼容性提升90% 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否也曾遇到过"找不到MSVCR120.dll"…...

企业级软件授权解决方案:Beyond Compare 5工具激活与管理指南

企业级软件授权解决方案&#xff1a;Beyond Compare 5工具激活与管理指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在现代软件开发与数据管理工作流中&#xff0c;软件授权与工具激活是保…...

Android Studio中文界面配置指南:提升开发效率的完整方案

Android Studio中文界面配置指南&#xff1a;提升开发效率的完整方案 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 一、问题诊断…...

对工作分工的一点简介记录

今天谈需求的时候&#xff0c;主管兼功能需求顾问&#xff09;的一句话&#xff08;XXX业务主管有个需求报表&#xff0c;我已经让他出了表样且让他在系统中截图字段&#xff0c;我一会转发给你开发一下&#xff09;让我打开了话匣子&#xff0c;我们就交流了一下信息化业务关键…...

Databricks收购Quotient AI:AI智能体领域的战略布局

Databricks收购Quotient AI&#xff0c;剑指AI智能体可靠性难题Databricks收购了AI智能体评估与训练软件提供商Quotient AI&#xff0c;虽未公布具体交易金额&#xff0c;但此次收购旨在帮助企业更可靠地在生产环境中扩展AI智能体。Databricks在声明中表示&#xff0c;Quotient…...

Splunk RCE漏洞允许攻击者执行任意Shell命令

漏洞概述Splunk发布紧急安全公告&#xff0c;警告用户其Enterprise和Cloud平台存在一个高危漏洞&#xff08;CVE-2026-20163&#xff09;&#xff0c;CVSS评分为8.0。该漏洞允许攻击者在目标系统上执行远程命令&#xff08;RCE&#xff09;。漏洞成因漏洞源于系统在索引上传文件…...