我必须输出一个以%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/

10-12 14:50