printf 似乎忽略了字符串精度

2024-05-06

所以,我有点难受。根据man 3 printf在我的系统上,字符串格式"%5s"应使用指定的精度来限制从给定字符串参数打印的字符数。



% man 3 printf
PRINTF(3)                BSD Library Functions Manual                PRINTF(3)

NAME
     printf, fprintf, sprintf, snprintf, asprintf, vprintf, vfprintf,
     vsprintf, vsnprintf, vasprintf -- formatted output conversion

...
     s       The char * argument is expected to be a pointer to an array of
             character type (pointer to a string).  Characters from the array
             are written up to (but not including) a terminating NUL charac-
             ter; if a precision is specified, no more than the number             
             specified are written.  If a precision is given, no null
             character need be present; if the precision is not specified, or
             is greater than the size of the array, the array must contain a
             terminating NUL character.
  

但我的测试代码并没有证实这一点:

#include <stdio.h>
int main()
{
        char const * test = "one two three four";
        printf("test: %3s\n", test);
        printf("test: %3s\n", test+4);
        printf("test: %5s\n", test+8);
        printf("test: %4s\n", test+14);
        return 0;
}

它输出



test: one two three four
test: two three four
test: three four
test: four
  

当我认为我应该得到



test: one
test: two
test: three
test: four
  

我做错了什么,还是手册页只是在骗我?

仅供参考:我知道我(一般来说)可以破解字符串,并插入临时的'\0'终止字符串(除非它是char const *,就像这里一样,我必须复制它),但它是一个 PITA(特别是如果我试图在同一个 printf 中打印某些东西的两半),并且我想知道为什么精度被忽略。


你没有设置精确,您正在设置字段宽度. The 精确总是以 a 开头.在格式规范中。

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

printf 似乎忽略了字符串精度 的相关文章

  • 在搜索 List 时,为什么 Enumerable.Any(Func predicate) 比带有 if 语句的 foreach 慢

    最近有件事引起了我的好奇心 Why is the Enumerable Any Func
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 如何用 Pandas DataFrame 中的行总和替换 NaN

    我试图用 Pandas DataFrame 中的行总和替换某些列中的 NaN 请参阅下面的示例数据 Items Estimate1 Estimate2 Estimate3 Item1 NaN NaN 8 Item2 NaN NaN 5 5
  • 使用绘图数学保留尾随零

    我在用着annotate 将文本覆盖在我的其中一个上ggplot2地块 我正在使用该选项parse T因为我需要使用希腊字母 rho 我想要文字说 0 50 但是尾随零被剪掉 我得到 0 5反而 这是一个例子 library ggplot2
  • 在 Visual Studio 中查找所有与 == 进行比较的情况

    我犯了一个错误 使用 来比较 IP 地址 而不是使用 C 中 IPAddress 类的 equals 方法 这将导致比较的是引用而不是值 由于我目前正在研究的解决方案对于一个人项目来说非常大 gt 100 000 行源代码 因此我非常确定我
  • DbConnection 不带 Db,使用内存中的 DataSet(或类似的)作为源

    我正在尝试对一些 NET 类进行单元测试 这些类 出于良好的设计原因 需要 DbConnections 来完成其工作 对于这些测试 我在内存中有某些数据可以作为这些类的输入 内存中的数据可以很容易地表示为 DataTable 或包含该 Da
  • sed 在文本文件中换行?

    我是 Sed 的新手 我有一堆 ASCII 文件 其中包含如下所示的数据 Test Version 2 6 3 Model Manufacturer HR21 100 Test Version 2 6 3 Model Manufacture
  • 如何使用保存实例状态来保存活动状态?

    我一直在研究Android SDK平台 并且不太清楚如何保存应用程序的状态 因此 考虑到对 Hello Android 示例的这个小改动 package com android hello import android app Activi
  • cygwin winsymlinks:本机不起作用

    我现在和 cygwin 斗争了很长一段时间 我广泛搜索了如何让 cygwin 创建 Windows 风格的符号链接 我尝试了以下方法 export CYGWIN winsymlinks native export CYGWIN winsym
  • 如何通过列表中的属性值获取/查找对象

    我有一个关于通过使用 LINQ 搜索 字段名称来获取列表对象的问题 我编码简单Library and Book为此类 class Book public string title get private set public string
  • 如何验证字符串仅包含字母、数字、下划线和破折号? [复制]

    这个问题在这里已经有答案了 如果我迭代字符串中的所有字符 我知道如何做到这一点 但我正在寻找一种更优雅的方法 正则表达式只需很少的代码即可实现这一目的 import re if re match A Za z0 9 my little st
  • 将列拆分为多列

    对于下面给出的数据 data1 lt structure list var1 c 2 7 2 6 7 2 7 2 7 1 7 1 7 1 5 1 2 7 1 5 1 7 1 2 3 4 5 6 7 1 2 4 6 Names var1 cl
  • bash 或 sh 中的“=”和“==”运算符有什么区别

    我意识到 和 运算符都可以在 if 语句中使用 例如 var some string if var some string then doing something fi if var some string then doing some
  • 如何更改android上的hosts文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经成功root了我的三星Galaxy Mini android 2 2 1 并认为我可以改变任何东西 就像root通常可以的那样 我想更改 And
  • 从 dtype ('O') 转换为日期时间时出现问题

    我正在导入大量文本文件并将它们附加到 pandas 数据框中 有一个列包含我需要的一堆日期 但我无法将它们转换为日期时间 因为它被列为对象 这行代码适用于其他任何其他数据类型 但当我在这里运行它时 它会抛出错误 df Date pd to
  • 如何在 IntelliJ 中快速文档中换行文本?

    Ctrl Q 快速文档 后我看不到所有文本 我必须水平滚动才能看到所有内容 我无法使编辑器适合窗口 更新 问题只是符号定义 即 第一行 描述 块文本 正确换行 实际上 我不想调整此窗口的大小 因为我更喜欢将其保留在相同的位置以便快速参考 我
  • Android Market 公司注册

    抱歉 这个问题与编程无关 但我无处可问 我在 android 帮助中心和支持中询问 但没有任何回应 在 Android Market 开设公司帐户需要什么 我希望我的公司被视为卖家 他们将如何验证公司的身份 我需要向市场提供哪些文件 Tha
  • 如何在 Ruby 中获取网页的 HTML 源代码 [重复]

    这个问题在这里已经有答案了 在 Firefox 或 Safari 等浏览器中 打开网站后 我可以右键单击该页面 然后选择以下内容 查看页面源代码 或 查看源代码 这显示了该页面的 HTML 源代码 在 Ruby 中 是否有一个函数 也许是一
  • 自动生成序列号

    我编写了下面的计数代码 目的是让它为我的数据生成自动序列号 以代替删除行后的 MySQL 序列号 但是当我运行它时 我发现 MySQL 表中没有任何条目 后来我将代码更改为 Dreamweaver 插入记录 并观察到 SN 序列号 字段不需
  • 正则表达式 括号之间的匹配 (...)

    我正在尝试从一条简单的线中抓取 2 件物品 Title Description 编辑 实际上一个想要显示的网址称为描述 因为我希望它显示而不是实际解析 Trivium https www youtube com user trivium 在
  • 更改同一页面上的页面过渡

    我有一个带有两个内部页面 data role page 的html 其中一页显示日期以及与该日期相关的数据 当我向左或向右滑动时 日期应该会改变 我这里需要的是让页面过渡显示 看来我不能使用 mobile changePage 对于同一页面
  • printf 似乎忽略了字符串精度

    所以 我有点难受 根据man 3 printf在我的系统上 字符串格式 5s 应使用指定的精度来限制从给定字符串参数打印的字符数 man 3 printf PRINTF 3 BSD Library Functions Manual PRIN