我必须输出一个以%character(%EE#WD…)开头的字符串,并且我正在使用sprintf在多个引用中,我看到使用%after%说明符会导致sprintf函数返回%字符。
但对我来说,在不同的编译器(如DEV C++,JDOODLE)中,结果不是我所期望的,最后我通过重复%说明符获得了4个字符。
原因是什么?
下面是代码和输出:
#include <stdio.h>
int main()
{
static char Command[10] ;
sprintf (Command,"%%EE#") ;
printf (Command) ;
return 0 ;
}
输出:
3.205269E-317E号#
#include <stdio.h>
int main()
{
static char Command[10] ;
sprintf (Command,"%%%%EE#") ;
printf (Command) ;
return 0 ;
}
输出:
%EE公司#
谢谢。
最佳答案
sprintf (Command,"%%EE#")
之后,Command
将包含%EE#
。如果现在将此内容作为格式字符串传递给printf
,则(现在)单个%
将被解释为格式说明符,然后查找浮点参数这是不提供的,实际上导致未定义的行为。使用sprintf (Command,"%%%%EE#")
,您“克服”了这个问题,因为Command
将包含%%EE#
。
但实际上你应该写。。。
static char Command[10] = "%EE#";
printf ("%s",Command);
或者。。。
static char Command[10];
strcpy(Command,"%EE#");
printf ("%s",Command);
关于c - sprintf中关于返回'%'字符的歧义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54056946/