gpt4 book ai didi

c - C printf 中的 'I'(大写 i)标志是什么?

转载 作者:行者123 更新时间:2023-12-02 01:41:34 25 4
gpt4 key购买 nike

编译以下代码时:

#include <stdio.h>
int main() {
printf("99% Invisible");
return 0;
}

在 gcc 7.5.0 中,我收到以下警告:

test.c: In function ‘main’:
test.c:4:16: warning: ' ' flag used with ‘%n’ gnu_printf format [-Wformat=]
printf("99% Invisible");
^
test.c:4:16: warning: 'I' flag used with ‘%n’ gnu_printf format [-Wformat=]
test.c:4:16: warning: format ‘%n’ expects a matching ‘int *’ argument [-Wformat=]
printf("99% Invisible");
~~~^

这是怎么回事?我在文档中的任何地方都没有看到提及“”标志或“I”标志。该代码输出 99visible,基本上忽略格式字符串中的空格和 I 并遵循 %n 格式。

编辑:人们似乎误解了这个问题。我知道如何 printf 文字 %,以及 %n 的作用。我只是好奇这里发生了什么。

(另外,对于那些了解上下文的人:我知道相关系统没有使用 C,我只是好奇 printf 在这里做什么)。

最佳答案

I flag 是 printf 的 GNU 扩展。来自 man page :

glibc 2.2 adds one further flag character.

I

For decimal integer conversion (i, d, u) the output uses thelocale's alternative output digits, if any. For example, since glibc2.2.3 this will give Arabic-Indic digits in the Persian ("fa_IR") locale.

因此,当编译器检查格式字符串时,它会看到 % In作为格式说明符,即空格和 I应用于 n 的标志转换说明符。由于这两个标志都不适用于 n转换说明符,编译器会为每个转换发出警告。

关于c - C printf 中的 'I'(大写 i)标志是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71534558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com