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转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章