C将int转换为字符串[重复]

Posted

技术标签:

【中文标题】C将int转换为字符串[重复]【英文标题】:C convert int to string [duplicate] 【发布时间】:2014-09-11 16:29:45 【问题描述】:

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

即,我想看到的:

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

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

有没有简单的方法可以做到这一点?

【问题讨论】:

这里有很多回答者***.com/questions/9655202/… 【参考方案1】:

您正在寻找“字段宽度说明符”

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”)很容易受到影响。

【讨论】:

重要提示:这里假设buffer 是数组。如果它是指向缓冲区的指针,这将不起作用,sizeof 将给出指针的大小(通常为 4 或 8),而不是它所指向的大小。 好点,讨厌的指针。【参考方案2】:

snprintf 的第二个参数指定 msximum 长度。如果您希望始终显示一定数量的数字,并用零填充前沿,您可以在格式说明符中指定。

sprintf(buffer, "%03d", 5); // will output "005"

在格式说明符声明固定长度之前指定一个数字。简单地指定一个数字会用空格填充长度,但我们可以通过在说明符中包含前导零来用零填充它。

编辑:正如 cmets 中所指出的,使用 snprintf 仍然是一个好主意,以防 buffer 没有分配足够的空间。请记住,您需要将字符串的长度 + 1 作为snprintf 的第二个参数传递。

【讨论】:

还是谨慎使用snprintf 而不是sprintf 以避免意外的缓冲区溢出。【参考方案3】:

printf 格式字符串上有各种限定符。查看http://www.cprogramming.com/tutorial/printf-format-strings.html

在这种情况下有用的是“%03d”,尽管您需要 snprintf 4 个字符(3 个加上空终止符)才能正确得到 005。

【讨论】:

你能解释一下 OP 需要使用哪些修饰符来解决他的问题吗? RTFM 并不是一个特别有用的答案。

以上是关于C将int转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为 int 时出现语法错误 [重复]

在c中将字符串转换为int [重复]

int在c#中浮动转换[重复]

将 Vector<int> 转换为字符串 [重复]

简单的 C++ - 关于字符串和连接以及将 int 转换为字符串 [重复]

C#将int转换为十六进制[重复]