微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用| sprintf填充

如何解决用| 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,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ѭ快几百倍,但可以进一步优化它。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。