我有一个虚假的问题。我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序为sprintf
格式。
我正在尝试以下
char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );
希望有以下字符串
"000000000000000000000000000324"
我做错了什么?它不代表填充0,最大宽度为30个字符?
答案 0 :(得分:66)
"%030d"
是您正在寻找的机器人
答案 1 :(得分:7)
填充和宽度来自之前类型说明符:
sprintf( buf, "%030d", my_val );
答案 2 :(得分:7)
你的语法略有错误;以下代码生成所需的输出:
char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );
来自Wikipedia's Article on Printf:
[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
答案 3 :(得分:5)
尝试:
sprintf( buf, "%030d", my_val );
答案 4 :(得分:3)
您的精度和宽度参数需要介于'%'和转换说明符'd'之间,而不是之后。实际上所有的旗帜都可以。因此,如果您想要正数前面的“+”,请使用'%+ d'。
答案 5 :(得分:1)
它是%030d
,最后带有字母。
答案 6 :(得分:-1)
一个相当有效的版本,不需要任何缓慢的库调用:
#include <stdio.h>
void uint_tostr (unsigned int n, size_t buf_size, char dst[buf_size])
{
const size_t str_size = buf_size-1;
for(size_t i=0; i<str_size; i++)
{
size_t index = str_size - i - 1;
dst[index] = n%10 + '0';
n/=10;
}
dst[str_size] = '\0';
}
int main (void)
{
unsigned int n = 1234;
char str[6+1];
uint_tostr(n, 6+1, str);
puts(str);
}
尽管它仍可能比sprintf
快一百倍,但可以进一步优化。