C将int转换为string

时间:2014-09-11 16:29:46

标签: c printf

我正在寻找一种将int转换为给定长度的字符串的方法。如果数字的表示较短,则应为零填充。

即,我想看到的内容:

snprintf(buffer, 3, "%d", 5); -> 005
snprintf(buffer, 2, "%d", 55); -> 55

实际上,snprintf(buffer, 3, "%d", 5);只需在字符串中返回5。

有一种简单的方法吗?

3 个答案:

答案 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。