C++ 用sprintf填充
我有一个愚蠢的问题。我想将一个整数打印到带有0的缓冲区填充中,但我无法将其排序为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”是您正在寻找
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);
}