c - 格式字符串参数后 "+1"对 printf() 的影响

标签 c

我有一些与此代码相关的问题。 printf 的参数类型为const char*...(可变参数列表)。

1)为什么程序的输出是d而不是127
2) +1 是否会被转换为字符串并传递给类型为const char* 的参数变量?

#include<stdio.h>
int main()
{
   printf("%d"+1 , 127); //how this will get executed?
   return 0;
}

输出:

d

最佳答案

第一个参数是指向char的指针。
文字 "%d" 将是指向 '%' 的指针,它隐含地后跟 'd''\0'。它是指向 char 的指针,因为它是字符串文字的 C 表示形式:末尾带有 '\0' 的字符序列;表示用作参数等作为指向 char 的指针。
但是"%d"+1,根据指针算法,是指向'd'的指针,后面是'\0'。< br/> 两者都以零结尾,适合 printf 的参数。

所以输出是一样的

printf("d", ignored);

127 变为“忽略”,即它被忽略,因为 "d" 告诉 printf 不要期待任何东西,因为它没有任何特殊字符序列,例如“%someletter”。所以它不会期望,不会寻找任何东西,也不会在它认为已经给出的完全正常的字符串之外进行任何打印。
但是请注意,附加参数(格式字符串中未包含的任何参数)会被评估并然后 被忽略。这是相关的,因为该评估的任何副作用(例如函数调用)实际上都会发生。
参见例如详情请看这里:
http://en.cppreference.com/w/c/io/fprintf

关于c - 格式字符串参数后 "+1"对 printf() 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729625/

相关文章:

Python 代码调用创建 OS 线程的 C 库,最终调用 Python 回调

C 从实时文件中读取(文件大小不断增加)

c - GCC 无法在包含的库中找到头文件

c - 为什么在 MASM Assembly 中使用 FPU x87 指令集执行操作时会得到无意义的数字?

c++ - 使用 C++ 获取在后台执行的命令的实际进程 ID

无法将 const char* 分配给 char*

c - K&R答题簿练习1.21

c++ - g++优化选项影响sin函数的值

c - main 中未声明的结构字段

c - 努力编写一个简单的计算器