问题描述
|
我有一个假的问题。我想将一个整数打印到一个填充为0的缓冲区中,但无法将其排序为“ 0”格式。
我正在尝试以下
char buf[31];
int my_val = 324;
sprintf( buf,\"%d030\",my_val );
希望有以下字符串
\"000000000000000000000000000324\"
我究竟做错了什么?这不是指以0填充最大宽度为30个字符吗?
解决方法
\"%030d\"
是您要寻找的机器人
,您的语法略有错误;以下代码产生所需的输出:
char buf[31];
int my_val = 324;
sprintf( buf,\"%030d\",(int)my_val );
摘自Wikipedia在Printf上的文章:
[...] printf(\"%2d\",3) results in \" 3\",while printf(\"%02d\",3) results in \"03\".
,填充和宽度位于类型说明符之前:
sprintf( buf,my_val );
,尝试:
sprintf( buf,my_val );
,您的精度和宽度参数需要在\'%\'和转换说明符\'d \'之间,而不是之后。实际上,所有标志都可以。因此,如果要在正数前加\'+ \',请使用\'%+ d \'。
,是8英镑,结尾是字母。
,一个相当有效的版本,不需要任何慢速的库调用:
#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);
}
尽管它仍可能比probably0ѭ快几百倍,但可以进一步优化它。