使用printf()函数内的指针分配格式说明符

时间:2011-08-16 16:54:26

标签: c

我无法理解下面的程序代码如何输出该值。请帮助我理解。

#include<stdio.h>
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
int main()
{
        printf(s,34,s,34);
        return 0;
}

输出:

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}

3 个答案:

答案 0 :(得分:2)

这实际上并不是一个宏。这只是对printf的简单调用。 printf的第一个参数是格式字符串。在这种情况下,它是全局变量s中定义的值。格式字符%c%s%c由参数34,s,34提供。因此,由于%s格式字符,字符串只是完整打印。并且两个34值打印为双引号字符(通过%c)。

答案 1 :(得分:1)

您的printf声明实际上等同于:

printf("char*s=%c%s%c;main(){printf(s,34,s,34);}", 34, s, 34);
               ^ ^ ^

我已使用^标记了转化说明符。这些分别替换为:

  • " - 对应于34
  • 的ASCII字符
  • *s
  • 的内容
  • " - 对应于34
  • 的ASCII字符

答案 2 :(得分:0)

您正在插入格式字符串作为参数,因此输出正确。 %s将替换为实际格式。 PS:宏在哪里?