如何在格式化字符串上使用 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()? 的相关文章

  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • ApiController 操作无法从查询字符串解析数组

    使用 Visual Studio 2012 2 MVC4 Web 应用程序 我有请求发送到我的 ApiController 如下所示 http localhost api keys ids 1 ids 2 ids 3 我的印象是以下方法应该
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 读取所有进程内存以查找字符串变量c#的地址

    我有 2 个用 C 编写的程序 第一个名为 ScanMe 的程序包含一个包含值 FINDMEEEEEEE 的字符串变量 以及一个值为 1546 22915487 的双精度变量 另一个名为 MemoryScan 的程序读取第一个程序的所有内存
  • 如何使用包含的转换的排名来比较两个标准转换序列

    include
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • 在 C# 中将 ulong 映射到 long ?

    我正在尝试将 ulong 映射到 long 反之亦然 将 uint 映射到 int 反之亦然 如下所示 为了将值保存在具有签名类型的 MS SQL 数据库中仅限整数和大整数 我这样做是因为我必须检查 在数据库中 一个数字 uint ulon
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 为了清楚起见,是否应该在返回类型上使用无用的类型限定符?

    当我们的头文件中有原型时 我们的静态分析工具会抱怨 返回类型上有无用的类型限定符 例如 const int foo 我们这样定义它是因为该函数返回一个永远不会改变的常量 认为 API 看起来更清晰const到位 为了清楚起见 我觉得这类似于
  • 如何并排显示 4 个三角形图案

    我无法让 4 个不同的三角形图案并排出现 这是一个控制台应用程序 这正是我试图通过使用嵌套 for 循环来实现的目标
  • 当另一个进程使用 std::fstream 写入文件时从文件读取[重复]

    这个问题在这里已经有答案了 我需要从文件中逐行读取 它是由 std getline 完成的 另一个进程的问题是一直向其附加数据 然后我需要读取新行 例如 文件一开始包含10行 我的程序读取了10行 那么我的程序应该等待 过了一会儿 另一个进
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He

随机推荐

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

    我有一个受保护的变量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