用sprintf填充

Abr*_*ile 34 c c++ string printf

我有一个虚假的问题.我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序sprintf.我正在尝试以下方面

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );
Run Code Online (Sandbox Code Playgroud)

希望有以下字符串

"000000000000000000000000000324"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?它不代表填充0,最大宽度为30个字符?

Set*_*son 70

"%030d" 是你正在寻找的机器人

  • 我不得不微笑:D (9认同)
  • "您正在寻找的机器人在手册中.它们被称为宽度和精度." :-) (2认同)

小智 9

你的语法略有错误; 以下代码生成所需的输出:

char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );
Run Code Online (Sandbox Code Playgroud)

来自维基百科关于Printf的文章:

[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
Run Code Online (Sandbox Code Playgroud)

  • 为什么当已经是int时,为什么需要将my_val强制转换为int呢? (2认同)

Nic*_*yer 7

填充和宽度位于类型说明符之前:

sprintf( buf, "%030d", my_val );
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 5

尝试:

sprintf( buf, "%030d", my_val );
Run Code Online (Sandbox Code Playgroud)

  • 您可能已经知道这一点,但使用`snprintf`样式函数指定缓冲区长度是一个很好的习惯,因为它有助于防止缓冲区溢出. (2认同)