gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:14:47 26 4
gpt4 key购买 nike

我有一些与此代码相关的问题。 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/

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