如何在格式化字符串上使用 strlen()?

2023-12-05

我想为以下内容编写一个包装函数mvwprint/mvwchgat ncurses在指定窗口中打印消息然后更改其属性的函数。

然而,mvwchgat需要知道它应该改变多少个字符 - 我不知道如何告诉mvwchgat格式化字符串有多长,因为strlen()例如,"abc%d"显然返回 5,因为strlen不知道什么%d代表 ...


在 C99 或 C11 中,您可以使用如下行:

length = snprintf(NULL, 0, format_string, args);

来自的手册snprintf(强调我的):

函数 snprintf() 和 vsnprintf() 写入的内容不会超过 size 字节(包括终止空字节 ('\0'))。如果输出由于此限制而被截断,则返回值是在有足够空间可用的情况下将写入最终字符串的字符数(不包括终止空字节)。因此,返回值 size 或更大意味着输出被截断。

既然我们给予snprintf0作为大小,那么输出总是被截断并且输出snprintf将是字符数would已经写好了,基本上就是字符串的长度了。

在 C89 中,你没有snprintf。解决方法是创建一个临时文件,或者如果您在 *nix 中打开/dev/null并写下这样的内容:

FILE *throw_away = fopen("/dev/null", "w"); /* On windows should be "NUL" but I haven't tested */
if (throw_away)
{
    fprintf(throw_away, "<format goes here>%n", <args go here>, &length);
    fclose(throw_away);
} /* else, try opening a temporary file */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在格式化字符串上使用 strlen()? 的相关文章

随机推荐

  • 为什么父类的受保护变量为空?

    我有一个受保护的变量Father类中 该变量的内容将发生变化Father类 但我需要在子类中使用这个变量 即 class Father protected body function construct this gt body test
  • 使用 urllib 删除 python 中的换行符

    我正在使用Python 3 x 使用时urllib request要下载网页 我得到了很多 n之间 我正在尝试使用论坛其他线程中给出的方法删除它 但我无法这样做 我用过strip 函数和replace 功能 但没有运气 我在 eclipse
  • 如何创建以当前时间命名的文件?

    我想在 log 目录下创建一系列文件 每个文件根据执行时间命名 在每个文件中 我想为我的程序存储一些日志信息 例如起作用的函数原型等 通常我使用 fopen log a 的硬方法 这不是为了这个目的 我只是写了一个时间戳函数 char ti
  • 无法将文件 .mdf 作为数据库附加

    我是 MVC 技术的新手 正在阅读培训材料 并遇到了以下实体框架错误消息 在这里 我尝试从 SQL Server Compact 数据库获取一条记录 但出现错误EmployeeController步骤中的类 Employee employe
  • Java 8 使用Optional 避免空指针检查

    是否可以编写这样的内容并避免检查元素是否不为空并且集合是否不为空 response getBody getRequestInformation getRequestParameters get 0 getProductInstances g
  • 计算数据框列中的单词数

    我有一个数据框 第一列中有句子 我想计算其中的单词数 Input Foo bar bar example lalala foo example sentence foo Output foo 3 bar 2 example 2 lalala
  • 使用 Thread.sleep 让 UI 线程等待

    我用 C 为 WP7 编写了这段代码 public void btn handler object sender EventArgs args Button btn Pressed Button sender ImageBrush br n
  • SQLite 片段函数实现不会将 TextView 中的文本格式化为 HTML

    我正在使用 SQLite 全文搜索实现搜索功能 我想像 Google 搜索一样用粗体查询文本显示结果 我已经实现了类似下面的代码 但它显示没有任何 HTML 格式的纯文本虽然将视图绑定到光标适配器并设置文本格式TextView 我无法弄清楚
  • 简化重复的 LESS

    我正在为 WordPress 网络创建一个主题系统 该系统支持多种布局主题 可以支持各种大学的配色方案 为此 我定期编译一个带有学校特定变量的 LESS 文件 使用 lessphp 并实质上将其用作主题中的辅助类库 每所学校都有 3 种颜色
  • Facebook iOS SDK Poke

    是否可以使用 iOS 版 Facebook SDK 来 戳 Facebook 好友 我尝试过在线 API 浏览器并筛选文档 但找不到公共 API 有谁知道我可以通过 iOS 应用程序发出 Graph API 请求来戳 Facebook 好友
  • 基于用户的字符串模板

    我有一个用户选择的字符串模板 我需要采用该模板并填写所需的信息 string templateString author title year 我可以执行 Contains 和 Replace 但是模板可能有大量输入或少量输入 例如 str
  • 让elasticsearch只返回某些字段?

    我正在使用 elasticsearch 来索引我的文档 是否可以指示它只返回特定字段而不是它存储的整个 json 文档 是的 使用更好的选择源过滤器 如果您使用 JSON 进行搜索 它将如下所示 source user message qu
  • 发送:spawn id exp7 未打开

    当我尝试执行 autoexpect 文件时出现错误send spawn id exp7 not open这是我的文件sh exp usr bin expect mysql credentials and connection data db
  • Apache2 - 使用基本身份验证针对某个位置授权用户,但仅适用于本地子网之外的用户

    在我的 Apache 2 配置中 我有一个VirtualHost看起来像这样
  • 错误:操作必须是普通对象。在 redux 中使用自定义中间件进行异步操作

    下面是我的动作创建者的代码 export function fetchPosts const request axios get ROOT URL posts API KEY return type FETCH POSTS payload
  • 根据日期过滤 Spark 数据框

    我有一个数据框 date string string 我想选择某个时间段之前的日期 我尝试了以下方法但没有成功 data filter data date lt new java sql Date format parse 2015 03
  • 我发现一些显示/隐藏桌面图标的代码,但它在过程中移动了图标。如何编辑代码以不移动图标?

    我正在为 Rainmeter 使用两个批处理文件 一个用于隐藏所有图标 然后启动 Rainmeter 另一个用于显示所有图标并退出 Rainmeter 以使我的桌面再次看起来正常 我的最终目标是将这两个批处理文件制作成任务栏上的按钮 我可以
  • 在 ios UIKeyboard 上启用向上键和向下键 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我们正在尝试创建一个 uikeyboard 它将收集用
  • 前置视觉块在 vim 中不起作用

    I m really fond of this idea of using Ctrl V Ctrl Q in windows to modify a visual block The technique is explained here
  • 如何在格式化字符串上使用 strlen()?

    我想为以下内容编写一个包装函数mvwprint mvwchgat ncurses在指定窗口中打印消息然后更改其属性的函数 然而 mvwchgat需要知道它应该改变多少个字符 我不知道如何告诉mvwchgat格式化字符串有多长 因为strle