我正在寻找一种将int转换为给定长度的字符串的方法。如果数字的表示较短,则应为零填充。
即,我想看到的内容:
snprintf(buffer, 3, "%d", 5); -> 005
snprintf(buffer, 2, "%d", 55); -> 55
实际上,snprintf(buffer, 3, "%d", 5)
;只需在字符串中返回5。
有一种简单的方法吗?
答案 0 :(得分:2)
您正在寻找“字段宽度说明符”
char buffer[10];
snprintf(buffer, sizeof(buffer), "%d", 5); -> "5"
snprintf(buffer, sizeof(buffer), "%3d", 5); -> " 5"
snprintf(buffer, sizeof(buffer), "%03d", 5); -> "005"
snprintf(buffer, sizeof(buffer), "%2d", 55); -> "55"
snprintf(buffer, sizeof(buffer), "%3d", 55); -> " 55"
snprintf(buffer, sizeof(buffer), "%03d", 55); -> "055"
snprintf()
的第二个参数是buffer
中要存储的最大字节数。这可以保护您免受缓冲区溢出的影响,而较早的sprintf()
(没有'n')容易受到缓冲区溢出。
答案 1 :(得分:1)
snprintf
的第二个参数指定 msximum 长度。如果要始终显示一定数量的数字,并使用零填充前沿,则可以在格式说明符中指定。
sprintf(buffer, "%03d", 5); // will output "005"
在格式说明符之前指定一个数字来声明固定长度。简单地指定一个数字将用空格填充长度,但是我们可以通过在说明符中包含前导零来用零填充它。
修改:正如评论中所指出的,使用snprintf
仍然是一个好主意,以防buffer
没有分配足够的空间。请记住,您需要传递字符串+ 1的长度作为snprintf
的第二个参数。
答案 2 :(得分:0)
printf格式字符串上有各种限定符。查看http://www.cprogramming.com/tutorial/printf-format-strings.html
在这种情况下有用的是“%03d”,虽然您需要snprintf 4个字符(3加上空终止符)才能正确地获取005。