scanf:内部带有宏(#define 常量)的模板

2024-04-24

我有一些像这样的代码:

#define MAXSIZE 100

int main() {
    char str[MAXSIZE+1];
    scanf("%100s", str);
    ...

问题是我仍然有“幻数”100,尽管定义了 MAXSIZE。 有没有办法正确地将 MAXSIZE“插入”scanf 格式字符串? (纯 C、c-99 标准品)


有,但你最好使用fgets():

if (fgets(str, sizeof str, stdin) != NULL) {
    // process input
}

这样做的好处(除了毫无疑问的可读性提升之外)是fgets()照顾尺寸正确地,我。 e.它解释了终止 0 字符(其中scanf()没有),因此在声明缓冲区时,您不必在大小上加一。它还总是为您以 NUL 终止数组。更不容易出错。


至于原来的问题:尝试通常的“stringify”技巧:

#define REAL_STRINGIFY(x) #x
#define STRINGIFY(x) REAL_STRINGIFY(x)

scanf("%" STRINGIFY(MAXSIZE) "s", str);

但这非常丑陋,不是吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scanf:内部带有宏(#define 常量)的模板 的相关文章

随机推荐

  • 错误请求 - 无效主机名 IIS7

    当我尝试在端口 8080 上访问我的网络应用程序时 出现以下错误 错误请求 无效主机名HTTP 错误 400 请求主机名无效 我什至不知道从哪里开始诊断这个问题 你检查一下绑定的是IIS吗 inetmgr exe 可能无法注册以接受 808
  • 在backbone.js 中缓存集合?

    确保我的集合保持缓存并仅获取一次的最佳方法是什么 我应该实现某种缓存层吗 我应该分享Collection变量到需要的地方 我可以信任 jQuery 的 AJAX 设置吗 ajaxSetup cache true 现在看起来的基本集合 the
  • 剪贴板大小限制

    复制到剪贴板的数据大小是否有限制 我正在使用 VB6 需要将数据块复制到剪贴板 应用程序调用GlobalAlloc GMEM MOVEABLE or GMEM DDESHARE 为要存储在剪贴板上的数据分配内存并使其可供其他应用程序使用 对
  • 如何在 R 中使用 dplyr “在事件之前”创建条件虚拟对象?

    我正在尝试使用规则创建条件虚拟 X 如果 NA 之前的最后两年 Y 1 则设置 X 1 仅计算一次 举个例子 这是我的数据中的一个样本 year country Y 1990 Bahamas 1 1991 Bahamas NA 1992 B
  • 如何在 WPF 中为用户控件创建用户定义(新)事件?一个小例子

    我有一个UserControl我正在其中使用Canvas 并在该画布中创建一个矩形 我想为该用户控件 画布和矩形 创建一个单击事件 然后我想在主窗口中使用它 问题是 我想为UserControl 怎么做 请展示一些例子或代码 A brief
  • 如果 vbs 脚本崩溃,请重新启动它

    我正在尝试制作一个 vb 脚本 如果它崩溃 它将重新启动另一个 vb 脚本 我搜索了又搜索 但我得到的只是如何重新启动程序 并且由于 vb 脚本是后台进程 因此当您在 Win32 Process 中搜索时它不起作用 这是我的代码 set S
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 为什么最好使用 Glib 数据类型(例如 `gint` 而不是 `int`)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么glib要重新定义类型 https stackoverflow com questions 1819561 why does glib redefine types 在 GTK 2 0 教程中
  • 用于计算机安全的遗传算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在为大学选择项目 我对遗传算法和计算机安全的结合非常感兴趣 因此我的问题是 是否可以使用GAany计算机安全方面 例如 我正在考虑
  • Chrome 浏览器在从 selenium 加载后立即关闭

    我正在运行一个基本的 python 程序来打开 Chrome 窗口 但是一旦代码执行 该窗口就会在那里停留一秒钟 然后立即关闭 from selenium import webdriver import time browser webdr
  • 如何组合杜松子酒中的路线组? [复制]

    这个问题在这里已经有答案了 我创建了两个不同的组gin具体路由 user and todo在两个不同的包中 我想将它们合并到一个文件中 这是我的userroutes go file package userrouter import git
  • 为复合对象编写比较器以进行二分搜索

    我有一个类和实例列表 看起来像这样 字段名称已更改以保护无辜 专有 public class Bloat public long timeInMilliseconds public long spaceInBytes public long
  • 使用 3DES 和 CBC 损坏的加密数据的前 8 个字节

    我在应用程序中使用 PyCrypto 来加密数据 但由于某种原因 无论我做什么 前 8 个字节 对应于第一个块 都会损坏 gt gt gt from Crypto Cipher import DES3 gt gt gt from Crypt
  • Rust 中的基本树和指针

    我拥有一些 C 语言背景 尝试 学习 Rust 让我对自己的能力产生了质疑 我正在尝试找出如何更改拥有的指针 并且正在努力做到这一点 除了从额外的库中复制之外 我无法弄清楚二叉树上所需的递归 特别是 我不知道如何交换指针分支 虽然使用链表我
  • 在 DNN 模块中执行 .exe

    我试图让我的 DNN 模块 6 1 3 在程序中发生特定条件时启动任何类型的可执行文件 此时我只是尝试让它运行记事本并创建一个文本文件 这就是我现在正在尝试的 ProcessStartInfo pi new ProcessStartInfo
  • SASS:直系后代规则?

    如何在 SASS 中表示直接后代 CSS 规则 Ex body gt div 在文档中似乎找不到它 http sass lang com docs yardoc file SASS REFERENCE html http sass lang
  • 将 Google 自定义搜索添加到 AMP 网站

    我有我的 Google 自定义搜索引擎 GCSE 代码
  • pip + requests.txt:奇怪的行为。不断下载各种版本的pandas

    这是用 pip 和 pandas 观察到的情况 以下是我的要求 txt asgiref 3 3 1 auditlog3 1 0 1 click 7 1 2 auditlog3 dj database url 0 5 0 Django 3 1
  • NSLog 上的 EXC_BAD_ACCESS 没有字符串格式

    我在以下代码行中收到 EXC BAD ACCESS 或 malloc 错误 NSLog Points 这对我来说毫无意义 因为它应该访问字符串常量而不是其他任何东西 通常是 EXC BAD ACCESS 但偶尔会出现以下错误 在同一行 An
  • scanf:内部带有宏(#define 常量)的模板

    我有一些像这样的代码 define MAXSIZE 100 int main char str MAXSIZE 1 scanf 100s str 问题是我仍然有 幻数 100 尽管定义了 MAXSIZE 有没有办法正确地将 MAXSIZE