- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近,我注意到一个奇怪的案例,我想验证一下:
通过 SUS,对于格式字符串中的 %n
,相应的 int
将被设置为 the-amount-of-bytes-written-to-the-output .此外,对于 snprintf(dest, 3, "abcd")
,dest
将指向 "ab\0"
。为什么?因为要将不超过 n (n = 3) 个字节写入输出(dest
缓冲区)。
我为代码推断出:
int written;
char dest[3];
snprintf(dest, 3, "abcde%n", &written);
written
将设置为 2(从计数中排除空终止)。但是根据我使用 GCC 4.8.1 进行的测试,written
设置为 5。我误解了标准吗?这是一个错误吗?这是未定义的行为吗?
编辑:
@wildplasser 说:
... the behavior of %n in the format string could be undefined or implementation defined ...
和
... the implementation has to simulate processing the complete format string (including the %n) ...
@par 说:
written
is 5 because that's how many characters would be written at the point the%n
is encountered. This is correct behavior.snprintf
only copies up tosize
characters minus the trailing null ...
和:
Another way to look at this is that the
%n
wouldn't have even been encountered if it only processed up to 2 characters, so it's conceivable to expectwritten
to have an invalid value...
和:
... the whole string is processed via
printf()
rules, then the max-length is applied ...
是否可以验证它是标准、标准草案还是某些官方来源?
最佳答案
written
是 5,因为这是在遇到 %n
时要写入的字符数。这是正确的行为。 snprintf
只复制最多 size
个字符减去尾随的 null(所以在你的情况下 3-1 == 2。你必须将字符串格式化行为与 only-write 分开-这么多字符。
另一种看待这个问题的方法是,如果 %n
只处理最多 2 个字符,它甚至不会遇到,所以可以想象 written
具有无效值。如果您期望在遇到 %n
时在 written
中有效(但没有),那么这就是错误所在。
所以请记住,整个字符串是通过 printf()
规则处理的,然后应用最大长度。
关于到目前为止在 snprintf 中写入的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556109/
我希望任何人都可以在这个主题上为我提供帮助,即使这不是特定的编程问题。 我正在写一个单例论文,将MySQL与MongoDB进行比较,并且我想写一些有关Youtube的东西,因为该平台必须处理大量数据负
使用W3C validator验证HTML标记中的音频和视频时出现错误。 Validation Output: 1 Error Error Line 28, Column
我正在使用的功能是 function joinslots(freeTimings){ joined=[]; if(freeTimings.length==1){ joi
我的 Play 商店应用遇到问题。目前,一些日常应用统计数据出现延迟。我们希望尽快解决该问题。 最佳答案 请稍等,几天或更快后即可使用。有时他们的服务器重载,这就是原因。 关于google-play
使用外连接合并两个表。让我们说 df1 = ['产品ID', '名称'] df2 = ['用户ID', '产品ID', '使用情况'] 我尝试在 pandas 中使用带有合并功能的外连接。 pd.me
我正在做我的第一个表格计算,这是我在过去一天研究并想出的 jQuery。 顺便说一下,这只是我发现的让一切正常运行的方法,不一定是最好的方法。我的老板希望我使用 .blur() 而不是 .on(),但
Scalamock 拒绝了我的 mock 尝试,说它不支持超过 22 种方法。 原因是因为在我试图模拟的类中总共有超过 22 个方法(2 个是我的,20 多个是混合的(来自 Akka Json 支持)
应用商店里有一个叫 Touchpad 的应用,最后一次更新是在 11 月 29 日,其中包含一个新功能,支持“使用设备键盘上的 Siri 键向电脑发送文本”,我想知道是否有开放的 API Siri现在
目前(2009 年年中)GCJ 的现状如何? 最新消息是2007年的,所以我想知道是否有任何形式的进展?我记得不久前有一个可用的 lucene 编译版本,它使用 gcj 从 java 源代码编译它。目
我是第一次开始使用 OpenCL,我正在尝试优化缩减内核。内核采用大小为宽度像素的 float 正方形网格(数据表示灰度图像的亮度值)。内核对每一列求和并将每一列的总和返回到输出数组。 /* inpu
有一个正在运行的 github 线程(似乎已关闭并且已经完成了一堆提交/合并)。 尽管 VirtualBox 和 Vagrant 还不到 2 周大:*编辑:我仍然看到与/root/.my.cnf 相关
在 Android Studio 的 androidTest 文件夹中,我有几个测试用例,如下所示: Screenshot : Android Studio每个测试类执行后,应用程序退出并重新启动以进
目前正在开发一个包含 google maps 的应用程序,我愿意让它也适用于中国。 我知道中国的情况在过去几年发生了一些变化。所以我想知道:是否可以在中国的 Android 应用程序中使用谷歌地图?
我正在尝试使用 Cosmos DB RestAPI 列出本地(模拟器)实例上的数据库,但进展不够。有谁知道我在这里做错了什么...... var crypto = require("crypto");
有没有办法自定义 HTML 并以 html 格式发送通知电子邮件? 最佳答案 只需调整您的模板,例如 > https://github.com/pinax/django-notification/bl
我正在寻找一种方法来在类似于 Youtube 视频显示的 html5 视频上创建加载动画(引用: https://www.youtube.com/watch?v=5vcCBHVyG50 ) 我用 ca
我正在关注 Google Codelabs for instant app ,我正在尝试创建 topeka-ui(即时应用程序的 UI 功能模块)。 它告诉我为该 UI 模块启用这样的数据绑定(bin
我在 iPad 上使用 APSplitViewController 来获得两侧。在右侧工作时,我有一个位于 UINavigationController 内的 viewController。 当我以模
当前(但不常见),如果您调用以下 url,您会收到内部服务器错误: https://api.linkedin.com/v1/people/~/connections:(id,headline,pict
def cat_latin_word(text): """ convert the string in another form """ constant = "bcdfghj
我是一名优秀的程序员,十分优秀!