problem with printf function?

前端 未结 5 1820
Happy的楠姐
Happy的楠姐 2020-12-20 03:28

i wrote the following program

 #include 

 main()
 {
 int i = 2;
 float c = 4.5;
 printf(\"%d\\n\",c);
 printf(\"%f\\n\",i);
 return 0;
 }


        
相关标签:
5条回答
  • 2020-12-20 04:15

    Basically, format controls replace the placeholder according to specified data type.

    • %d expects argument of type int
    • %f expects argument of type double

    So Good way of doing this is

    #include <stdio.h>
    
    int main(){
       int i = 2;
       float c = 4.5;
       printf("%d\n",i);
       printf("%f\n",c);
       return 0;
    }
    
    0 讨论(0)
  • 2020-12-20 04:25

    an integer and a float have a different internal representation, so you must not mistake the printf %f with %d to avoid unpredictable results. People uses C expecially because C is fast, and it is fast just because it leave all under the programmer responsibility. So don't expect printf do some magic conversion under the hood because it just won't.

    0 讨论(0)
  • 2020-12-20 04:26

    Basically, the format placeholder is an instruction to the function about how to retrieve and interpret the next chunk of memory from the variable length argument list. It expects the format to be exactly what you tell it. When you retrieve memory in unintended ways, you can cause all sorts of issues and undefined behavior. This is why printf and its ilk are exploitable.

    0 讨论(0)
  • 2020-12-20 04:28

    Using incorrect format descriptors results in an Undefined Behavior.
    Undefined Behavior means the behavior cannot be explained. It might work it might not or give unpredictable results, this behavior can vary anyhow, it cannot be explained in portable conclusive way for all compilers.

    0 讨论(0)
  • 2020-12-20 04:30

    printf doesn't convert it's arguments. It's looking at the memory containing a float and printing it as if it were an integer - it's like taking an MP3 file and asking word to open it as if it were a doc.

    A floating point number is stored in a completely different way in memory to an integer - it's not just an integer with some decimal points

    0 讨论(0)
提交回复
热议问题