Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用sprintf填充_C++_C_String_Printf - Fatal编程技术网

C++ 用sprintf填充

C++ 用sprintf填充,c++,c,string,printf,C++,C,String,Printf,我有一个愚蠢的问题。我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序为sprintf格式。 我正在尝试以下方法 char buf[31]; int my_val = 324; sprintf( buf, "%d030", my_val ); 希望有以下字符串 "000000000000000000000000000324" 我做错了什么?这并不意味着用0填充最大宽度为30个字符 试试看: sprintf( buf, "%030d", my_val ); “%030d”是您正在寻找

我有一个愚蠢的问题。我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序为
sprintf
格式。 我正在尝试以下方法

char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );
希望有以下字符串

"000000000000000000000000000324"
我做错了什么?这并不意味着用0填充最大宽度为30个字符

试试看:

sprintf( buf, "%030d", my_val );

“%030d”
是您正在寻找的机器人

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

sprintf( buf, "%030d", my_val );

它是
%030d
,末尾是字母。

精度和宽度参数需要介于“%”和转换说明符“d”之间,而不是之后。事实上,所有的旗帜都是这样。因此,如果您希望正数前面加一个“+”,请使用“%+d”。

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

char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );
发件人:


一个相当有效的版本,不需要任何缓慢的库调用:

#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);
}
#包括
void uint_tostr(无符号整数n、大小buf_大小、字符dst[buf_大小])
{
const size_t str_size=buf_size-1;

对于(size_t i=0;i您可能已经知道这一点,但是使用指定缓冲区长度的
snprintf
样式函数是一个好习惯,因为它有助于防止缓冲区溢出。当它已经是
int
时,为什么需要将
my_val
强制转换为
int
?“您正在寻找的机器人在手册中。它们被称为宽度和精度。”:-)
#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);
}