scanf 不超过缓冲区溢出

2024-01-05

我有一个缓冲区,我不希望用户输入的字符多于缓冲区可以容纳的字符(以避免缓冲区溢出)。

我在用scanf并做了这样的事情:

char buffer[30] = {'\0'};
scanf("%30s", buffer);

但是,我知道如果用户输入超过 30 个,我会受到保护。但是,如果用户输入超过 30 个,缓冲区是否会以 null 终止?


scanf()使用“%s”转换说明符会向缓冲区添加一个终止空字符。

But,您要求输入 30 个字符,这实际上意味着 31 个字符,但只有 30 个字符的空间。您应该使用最大字段宽度 29。

char buffer[30] = {'\0'};
scanf("%29s", buffer);

另请注意转换说明符"%c"工作起来很像"%s",但不添加终止空字符,也不丢弃输入中的空格。根据您的期望,它可能比使用“%s”更好。

char buffer[30] = {'\0'};
scanf("%29c", buffer);
buffer[29] = '\0';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scanf 不超过缓冲区溢出 的相关文章

随机推荐

  • q.all 不适用于多个 Promise

    我有以下 q all 调用来解决两个承诺 我检查了所有帖子并尝试了所有其他实施方式 q all 及其相同的情况 var xyzdeffered q defer service1 getServiceDetail1 routeParams i
  • 如何将 numpy datetime64 转换为 datetime [重复]

    这个问题在这里已经有答案了 我基本上面临着这里发布的同样的问题 日期时间 时间戳和 datetime64 之间的转换 https stackoverflow com questions 13703720 converting between
  • Laravel 5.2.11,会话不起作用,会话 cookie 未设置

    我是 Laravel 的新手 我了解了模型 视图 刀片 控制器和路由以及它们如何协同工作 到目前为止 一切都很顺利 不过 我在会议上遇到了麻烦 当我使用 Laravel 附带的 AuthController 并通过 POST 请求点击 au
  • 单元测试控制器

    我有一个非常简单的场景 HttpGet public ActionResult CreateUser return View HttpGet public ActionResult Thanks return View HttpPost p
  • PostgreSQL 12 - “base”目录中的大型缓存文件

    我注意到我的 8MB 小数据库被 PostgreSQL 12 缓存在这个文件夹中 var lib postgresql 12 main base 16384 该文件夹包含多个 1GB 文件 例如 16417 大小为 1073741824 字
  • 使 dt 和 dd 具有相同的高度以在 dt 上应用背景颜色

    我有这个标记 dl class item tabs details dt Lot Size dt dd 324 sq meters dd dt Baths dt dd 2 dd dt Full Description dt dd p Hou
  • extjs 4树通过其内部id(而不是通过记录索引)选择特定节点

    我正在尝试将数据视图 资源管理器窗口 与树 目录树 同步 当我单击数据视图上的元素时 我希望在树上选择相同的节点 问题是使用tree getSelectionModel select index 不允许我通过节点的内部 id 我在树存储中提
  • 如何将参数传递给 Dockerfile?

    我正在使用 RUN 指令Dockerfile安装 rpm RUN yum y install samplerpm 2 3 但是 我想传递值 2 3 作为参数 我的 RUN 指令应该类似于 RUN yum y install samplerp
  • 蓝牙 GATT - onServicesDiscovered(BluetoothGatt gatt, int status) 不包含所有服务

    我有代码连接到并尝试发现广告自定义服务的自定义 BLE 服务器设备提供的所有服务 代码works on 搭载 Android 5 1 的 Nexus 5 三星 SM T320 搭载 Android 4 4 2 中兴 Blade Vec 4G
  • git-svn:自动导入/创建 svn 修订版作为 git 标签

    我正在使用 git svn 来处理 svn 存储库 吉特master分支是svn的镜像trunk分支 唯一使用的 svn 分支 即 master 分支和 trunk 分支上的元素之间存在一对一的关系 我想要有与 svn 修订相对应的 git
  • 我应该将 .vcxproj.filter 文件添加到源代码管理吗?

    在评估 Visual Studio 2010 Beta 2 时 我看到在转换后的目录中 我的vcproj文件变成了vcxproj文件 还有vcxproj 过滤器每个项目旁边的文件似乎包含文件夹结构的描述 源文件 头文件等 您认为这些过滤器文
  • .Net Framework:当未捕获异常时,不会调用Finally块[重复]

    这个问题在这里已经有答案了 一个简单的控制台应用程序 在 Visual Studio 2019 Net Framework 4 7 Windows 中 static void Main string args try Console Wri
  • 禁用表单提交上的提交按钮的问题

    我正在使用 jQuery 禁用提交插件 但我遇到了问题 如果我禁用提交按钮 它们不会传递回服务器 因此我无法判断按下了哪个按钮 这是正常的吗 我能做些什么吗 我真的不想重组我的网站 所以我必须在表单提交时设置一个变量来告诉按下了哪个按钮 有
  • SFML 在 Windows 下加载字体时出错

    我一直在尝试使用 SFML 开发适用于 Windows 和 Linux 的跨平台应用程序 到目前为止一切都很顺利 除了 Windows 版本似乎无法加载字体 不过我在 Linux 下没有任何问题 我做了研究 并根据我执行的位置确保文件就位
  • 在Python中使用Popen执行Powershell脚本,如何获取Powershell脚本的输出并将其更新到网页?

    我创建了一个带有按钮的简单 HTML 当用户单击该按钮时 它将调用在服务器端执行的Python文件 在Python文件中 我使用Popen调用Powershell脚本 如下代码 command line r C WINDOWS system
  • 在Python中组合模块文件

    有没有一种方法可以将 Python 文件组合在一起 类似于 Java 中的 JAR 我需要一种打包 Python 类和函数集的方法 但与标准模块不同 我希望它位于一个文件中 在寻找同一问题的解决方案后 我最终编写了一个简单的工具 它将多个
  • 如何从Flash加载flex swf?

    我有一些在 Flex 中编译的 swf 我想将其加载到 flash pro 中的影片剪辑中 那么如何在 Flash CS4 中加载 flex swf 呢 怎么做这样的事情 您可以在这里阅读更多相关信息 http troygilbert co
  • Cakephp 路由前缀

    我的应用程序有 3 种不同的布局 与内容的不同部分相关 我想定义我的 url s 以便他们在开头的 ex 中包含该部分 mypage com part1 controller 我不知道如何改变路线来实现这一点 附 我不想要普通的前缀路由 其
  • 如何在日志文件名中的文件扩展名之前附加滚动索引

    我正在使用RollingLogFileAppender它工作得很好并且正在滚动到新文件中 但它在文件的最后添加了 1 2 等 所以我最终得到 log 1 log 2等等 所以从技术上讲 每个文件都有一个资源管理器不知道的新扩展名 所以我不能
  • scanf 不超过缓冲区溢出

    我有一个缓冲区 我不希望用户输入的字符多于缓冲区可以容纳的字符 以避免缓冲区溢出 我在用scanf并做了这样的事情 char buffer 30 0 scanf 30s buffer 但是 我知道如果用户输入超过 30 个 我会受到保护 但