用| sprintf填充

| 我有一个假的问题。我想将一个整数打印到一个填充为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, \"%030d\", my_val );
    
尝试:
sprintf( buf, \"%030d\", 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ѭ快几百倍,但可以进一步优化它。     

要回复问题请先登录注册