scanf /字段长度:使用变量/宏,C/C++

2023-11-27

使用 scanf 时如何使用变量来指定字段长度。 例如:

char word[20+1];
scanf(file, "%20s", word);

另外,使用 20+1 是否正确(因为它需要在末尾添加 \0?)。相反,我想要这样的东西:

#define MAX_STRING_LENGTH 20

and then

char word[MAX_STRING_LENGTH+1];
scanf(file, "%"MAX_STRING_LENGTH"s", word); // what's the correct syntax here..?

这可能吗?如果它是一个像这样的变量呢?

int length = 20;
char word[length+1];
scanf(file, "%" length "%s", word); // what's the correct syntax here..?

Thanks.


以下应该满足第一种情况的需要。

#define MAX_STRING_LENGTH 20
#define STRINGIFY(x) STRINGIFY2(x)
#define STRINGIFY2(x) #x

{
  ...
  char word[MAX_STRING_LENGTH+1];     
  scanf(file, "%" STRINGIFY(MAX_STRING_LENGTH) "s", word);
  ...
}

注意:需要两个宏,因为如果您尝试直接使用类似 STRINGIFY2 的内容,您只会得到字符串"MAX_STRING_LENGTH"而不是它的价值。

对于第二种情况,你可以使用 snprintf 之类的东西,至少某些版本的 C 只会让你在堆中分配动态大小的数组malloc()或一些这样的。

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

scanf /字段长度:使用变量/宏,C/C++ 的相关文章

随机推荐

  • Java“final”方法:它承诺什么?

    在 Java 类中 方法可以定义为final 以标记此方法不得被覆盖 public class Thingy public Thingy public int operationA this method does return That
  • 从远程 Git 存储库中删除最后一次提交

    如何从远程 Git 存储库中删除最后一次提交 例如我在日志中看不到它 如果例如git log给我以下提交历史记录 A gt B gt C gt D HEAD ORIGIN 我怎样才能去 A gt B gt C HEAD ORIGIN 请注意
  • 为什么Keras/tensorflow的sigmoid和crossentropy精度低?

    我有以下简单的神经网络 仅具有 1 个神经元 来测试计算精度sigmoid激活 binary crossentropy喀拉斯 model Sequential model add Dense 1 input dim 1 activation
  • Hive 更改位置语句不起作用

    hive gt alter table my table name set location hdfs nameservice1 foo OK Time taken 0 173 seconds hive gt alter table my
  • Xcode 重复行

    There is a Duplicate command in the Edit Menu with a default shortcut of D but it is as Halley pointed out meant for dup
  • 在 Firefox 中如何防止拖动鼠标时选择文本?

    我想知道这些拖放小部件如何取消拖动元素和页面中其他元素中的文本选择 我尝试了以下代码 该代码在 IE8 中有效 无法选择文本 但在 Firefox 中无效 仍然可以选择文本 p Hello World p 或者 类似于 Moz 的 IE8
  • 如何使一个变量的值跟踪另一个变量的值

    这是我现在拥有的一个非常简单的示例 public static class Settings public static TH th public partial class PhrasesFrame private void SetC1B
  • 如何在不删除数据库内容的情况下运行 Rails 集成测试?

    我已经编写了一些集成测试 我想在投入生产之前针对我的产品数据库副本运行这些测试 这让我可以测试所有路线是否仍然正确 所有页面渲染都没有错误 并且一些多页面工作流程按预期工作 当我运行集成测试时 它会删除我已加载的数据库并加载测试装置 如预期
  • 如何创建自定义 EL 函数来调用静态方法?

    我是 JSF 2 的新手 我的问题与 BalusC 对此问题的回答有关jsf2 ajax根据请求参数更新部分我尝试了 BalusC 发布的 kickstart 代码 遇到了 EL 解析错误 nameofpage xhtml 12 64 re
  • Java 文件:序言中不允许出现内容

    我是 Spring 新手 开始使用 Sprint Tool Suite eclipse 并在我的 Maven 项目的 java 文件中看到此错误 Prolog 中不允许内容 这会阻止该类 这只是一个最小的 SpringBootApplica
  • 布局兼容类型的目的是什么?

    标准defines当两种类型是布局兼容 但是 我在标准中没有看到当两种类型同时存在时会产生什么后果布局兼容 看起来布局兼容是一个没有在任何地方使用的定义 目的是什么布局兼容 注意 据说 这可能意味着类型具有相同的布局 offsetof对于每
  • 声明区域和范围有什么区别

    关于声明区域 每个名称都在程序文本的某个部分中引入 称为 声明区域 这是程序中最大的部分 该名称有效 关于范围 一般来说 每个特定名称仅在某些可能的范围内有效 程序文本的不连续部分称为其范围 它们之间有什么区别 声明区域是可以声明名称的地方
  • 在 64 位计算机上访问硬件 PKCS11 令牌

    这就是我正在尝试做的事情 我有一个带有一些证书的硬件令牌 我正在编写一个 Java 应用程序来尝试访问这些证书 我在 Windows 32 位机器上使用了 jre6 中的 SunPKCS11 库 这是我如何访问证书的一个小示例 String
  • 如何在 Firefox 3 中从 HTML 输入表单获取文件路径

    我们有简单的 HTML 表单
  • ASP.NET 4.5 TryUpdateModel 不使用母版页在 WebForm 中选取表单值

    我正在使用 WebForms 并且尝试在母版页内执行模型验证 由于某种原因 模型没有获取值 这意味着如果我输入一个好的值 则在验证触发后 模型会一直返回空 因此一遍又一遍地触发验证 如果我将代码放在没有母版页的页面中 它就可以正常工作 我举
  • 从 javascript 在浏览器 (Chrome) 中播放声音

    我正在写一个 html 页面 我希望它在运行时按照某些 JavaScript 的指定发出声音 在 html 中 按照我在这里阅读的答案中的建议 我有以下行 这会在加载时播放声音 因此我确信我已经给出了有效 wav 文件的有效路径 一旦一切正
  • gcc 的 __attribute__((packed)) / #pragma pack 不安全吗?

    在 C 中 编译器将按照声明的顺序布置结构体的成员 并在成员之间或最后一个成员之后插入可能的填充字节 以确保每个成员正确对齐 gcc 提供了语言扩展 attribute packed 它告诉编译器不要插入填充 从而允许结构成员不对齐 例如
  • 在 MATLAB 中标准化矩阵的快速技术

    我想在 Matlab 中标准化矩阵的每一列 我尝试了两种实现 选项A mx max x mn min x mmd mx mn for i 1 size x 1 xn i x i mn mmd 0 mmd mmd 0 2 2 1 end 选项
  • 如何从 Tensorflow.js (.json) 模型转换为 Tensorflow (SavedModel) 或 Tensorflow Lite (.tflite) 模型?

    I have 下载的来自 Google 的 Tensorflow js tfjs 的预训练 PoseNet 模型 因此它是json file 但是 我想在Android上使用它 所以我需要 tflite模型 尽管有人将类似的模型从 tfjs
  • scanf /字段长度:使用变量/宏,C/C++

    使用 scanf 时如何使用变量来指定字段长度 例如 char word 20 1 scanf file 20s word 另外 使用 20 1 是否正确 因为它需要在末尾添加 0 相反 我想要这样的东西 define MAX STRING