C 关于printf语句的输出有问题
我在理解以下代码段的输出时遇到一些问题C 关于printf语句的输出有问题,c,printf,pointer-arithmetic,post-increment,C,Printf,Pointer Arithmetic,Post Increment,我在理解以下代码段的输出时遇到一些问题 #include<stdio.h> int main() { char *str; str = "%d\n"; str++; str++; printf(str-2, 300); return 0; } 代码的输出是300 我知道直到printf语句前面的一行,str都指向字符-%。我需要的帮助是理解为什么printf函数打印300。就在printf之前,str不是指向%而是指向\n ++运算符
#include<stdio.h>
int main()
{
char *str;
str = "%d\n";
str++;
str++;
printf(str-2, 300);
return 0;
}
代码的输出是300
我知道直到printf语句前面的一行,str都指向字符-%。我需要的帮助是理解为什么printf函数打印300。就在printf之前,str不是指向%而是指向\n
++运算符递增str的值以指向数组中的下一个字符。由于此操作已执行两次,因此它指向\n。然后,当您将str-2传递给printf时,它将创建一个指向%的指针。因此printf看到字符串%d\n,这导致300按预期打印。就在printf之前,str不是指向%d,而是指向\n
++运算符递增str的值以指向数组中的下一个字符。由于此操作已执行两次,因此它指向\n。然后,当您将str-2传递给printf时,它将创建一个指向%的指针。因此printf看到字符串%d\n,这导致300按预期打印。2-2等于0:
事实上,这两种表达方式
str++;
str++;
可以像这样重写
str = str + 1;
str = str + 1;
相当于一个语句
str = str + 2;
然后在printf语句中
printf(str-2, 300);
您使用的表达式str-2指向字符串文字%d的第一个字符\n或者表达式str-2的值等于str的原始值
你还记得2-2==0吗
所以上面的陈述相当于
printf(str, 300);
当str最初由字符串文本%d初始化时\n2-2等于0:
事实上,这两种表达方式
str++;
str++;
可以像这样重写
str = str + 1;
str = str + 1;
相当于一个语句
str = str + 2;
然后在printf语句中
printf(str-2, 300);
您使用的表达式str-2指向字符串文字%d的第一个字符\n或者表达式str-2的值等于str的原始值
你还记得2-2==0吗
所以上面的陈述相当于
printf(str, 300);
当str最初由字符串文本%d初始化时\nNo,在printf语句str指向换行符之前。我不确定此语句在做什么:printfstr-2300;但是,第一个参数应该是格式字符串。第二个和以下参数是要在格式字符串中提供给输出格式说明符的值。然而,在printf语句str指向换行符之前,为stringNo格式引用一些变量被认为是一种安全风险;但是,第一个参数应该是格式字符串。第二个和以下参数是要在格式字符串中提供给输出格式说明符的值。但是,为格式字符串引用某些变量被认为是一种安全风险