printf 和 vprintf 函数系列之间有什么区别,什么时候应该使用其中一个而不是另一个?

2024-01-03

我明白两者之间的区别printf, fprintf, sprintf等功能和vprintf, vfprintf, vsprintf等函数与它们如何处理函数参数有关。但具体如何呢?真的有理由使用其中一种而不是另一种吗?我应该总是使用printf因为这是在 C 中更常见的事情,或者是否有合理的理由选择vprintf反而?


printf()和朋友都可以正常使用。vprintf()当你想写自己的东西时,朋友就适合你printf()类函数。假设您想编写一个函数来打印错误:

int error(char *fmt, ...)
{
    int result;
    va_list args;
    va_start(args, fmt);
    // what here?
    va_end(args);
    return result;
}

你会发现你无法通过args to printf(), since printf()需要多个参数,而不是一个va_list争论。这vprintf()然而,函数do take a va_list参数而不是可变数量的参数,所以这里是完整的版本:

int error(char *fmt, ...)
{
    int result;
    va_list args;
    va_start(args, fmt);
    fputs("Error: ", stderr);
    result = vfprintf(stderr, fmt, args);
    va_end(args);
    return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

printf 和 vprintf 函数系列之间有什么区别,什么时候应该使用其中一个而不是另一个? 的相关文章

随机推荐

  • htaccess - 禁止直接访问除登录用户之外的所有文件 (PHP)

    使用 htacess 拒绝所有 是否可以只允许登录我的系统的用户直接访问文件 如果有什么区别的话 我的网站是用 Drupal PHP 构建的 如果这是可能的 那么理想情况下我也想检查用户的角色 你不能这样做 htaccess独自的 你需要做
  • Visual Studio 2013隐藏构建进度窗口

    在 Visual Studio 2013 社区中 每次构建时 都会出现一个构建进度窗口 并在构建完成后消失 是否有一个选项可以隐藏而不显示该窗口 谢谢 该窗口是由 CodeMaid 扩展生成的 要禁用它 请打开 Codemaid 的配置 然
  • 如何根据动态改变背景颜色来动态改变文本颜色

    我正在建立一个新网站 需要我的文本根据不断变化的背景颜色改变颜色以保持对比度 我在网上搜索了不涉及 Sass 的答案 但没有一个有效 我尝试过一些 JavaScript 但它们仅在背景是您手动更改的固定颜色时才起作用 我当前的文件 http
  • ASP.NET 2.0 中的 Gridview 列宽度

    如何控制 ASP NET 2 0 中 gridview 控件的列宽 您可以使用 HeaderStyle Width ItemStyle Width 或 FooterStyle Width 属性 这些可以应用于所有列或每列
  • Typescript Jest 说我想要模拟的类型上不存在模拟或模拟返回值

    这是我想测试的一个类 Request js import axios AxiosInstance from axios import config from config const axiosSingleton AxiosInstance
  • 在 d3 中通过退出转换保持元素顺序 (selection.order)

    我将切入正题fiddle http jsfiddle net K6Yrw http jsfiddle net K6Yrw 点击第二个按钮快速查看效果 我在用着selection order因为我需要 DOM 元素以与数据元素相同的顺序存在
  • 乘客遇到库未加载错误:liblzma.5.dylib

    我正在尝试与乘客一起运行轨道 我安装了 AWS SDK 1 和 2 gem gem aws sdk v1 gem aws sdk gt 2 当我使用AWS sdk运行时 s3 AWS S3 new 我遇到错误 LoadError dlope
  • 使用 .htaccess 创建绝对路径的子域

    嘿 我的主人真是太糟糕了 由于某些奇怪的原因 在 cPanel 中创建子域根本不起作用 而且他们的支持热线总是很忙 我想我可以通过使用 htaccess 来解决这个问题 我确信这并不难 但我对 mod rewrite 有点陌生 并且在过去
  • Excel VBA 重新计算选择

    我有一些 Excel 电子表格对数据库的影响非常大 对总账表进行了 100 多次查询 哎呀 仅刷新我所在的工作表 SHIFT F9 在某些电子表格中很有帮助 但我想要一种仅刷新所选单元格的方法 我想出了以下代码 并将其放置在 ThisWor
  • 如何制作双向平台box2d主体?

    我使用 box2d 创建了平台 我想要 box2d 身体检测而不是动态检测 Box2d 形状将执行以下操作 在某些条件下检测碰撞 在某些情况下不检测碰撞 两种条件都适用于同一 box2d 对象中的不同条件 任何想法都会有很大帮助 提前致谢
  • nodejs firebase错误RangeError:超出最大调用堆栈大小失败

    我在 firebase 中遇到错误 FIREBASE 警告 用户回调引发异常 RangeError 超出最大调用堆栈大小 我没有发现我的错误 我在这里很迷失 请帮助 我的代码如下所示 app post updateCoords req re
  • 如何在perl中合并2个深度哈希

    我用 Perl 编写了一个 sub 来合并相同结构的 2 个哈希值 这样合并 a b a k1 gt sk1 gt v1 k2 gt sk3 gt v3 sk4 gt v4 b k1 gt sk2 gt v2 k3 gt sk5 gt v5
  • 谁以及何时分配 PCI/PCIe 设备 BAR 基地址?

    我正在寻找内核如何进行 PCI PCIe 枚举和 BAR 分配 我以为内核会在启动时分配BAR的PCI基地址 但是当我尝试pci Earlydump 在内核初始PCI子系统之前 查看BAR的值时 我发现所有基地址都已经分配了 这是否意味着
  • 在 redshift 中将 MM/DD/YYYY 转换为 YYYYMMDD

    我需要在亚马逊 Redshift 数据库中将 MM DD YYYY 转换为 YYYYMMDD 这个查询的结果给了我一些奇怪的结果 有人可以帮帮我吗 选择to date 07 17 2017 YYYYMMDD 0007 07 20 如果您只想
  • 为什么React项目名称不能包含大写字母?

    我在尝试在 React 中创建新项目 newRecipeApp 时收到以下消息 npx installed 91 in 29 359s Could not create a project called newRecipeApp becau
  • 是否可以指定TableRow的高度?

    我有一个TableLayout与多个TableRow里面的景色 我希望以编程方式指定行的高度 例如 int rowHeight calculateRowHeight TableLayout tableLayout new TableLayo
  • 如何在 VS 2008 中启用 DirectX 变量的更多调试信息?

    我能够启用 directX 变量 如 LPD3DXMESH 等 的调试信息 通常它只显示 IUnknown 和一些指针值 但如果启用了额外的调试 则可以查看有关该结构的更多详细信息 问题是我丢失了该项目 现在我不记得如何再次启用此类调试 请
  • 安装 JDK 和使用转储之间的区别

    全部 我想知道使用Oracle提供的安装程序安装JDK和使用安装后创建的JDK目录有什么区别 假设我使用 oracle 的安装程序在机器 M1 上安装了 JDK7u1 位置为 C Program Files Java JDK7u1 我可以将
  • 来自 Javascript 的 SOAP Web 服务调用

    我正在努力从网页成功地对 SOAP Web 服务进行 Web 服务调用 Web 服务是使用 JAX WS 的 Java Web 服务 这是我尝试调用的网络方法 WebMethod public String sayHi WebParam n
  • printf 和 vprintf 函数系列之间有什么区别,什么时候应该使用其中一个而不是另一个?

    我明白两者之间的区别printf fprintf sprintf等功能和vprintf vfprintf vsprintf等函数与它们如何处理函数参数有关 但具体如何呢 真的有理由使用其中一种而不是另一种吗 我应该总是使用printf因为这