在 C 语言中,如果想要将一个数字转换为一个字符串,常用的有以下 3 种方式。
- 使用 sprintf() 函数。
- 使用 snprintf() 函数(推荐)。
- 使用 itoa() 函数(非标准)。
使用 sprintf() 函数
在 C 语言中,我们可以使用 sprintf() 函数来将一个数字格式化写入到指定的字符数组中。
语法:
sprintf(str, format, num)说明:
sprintf() 函数接收以下 3 种参数。
str(char *):用于保存结果。format(const char *):是预定义好的格式。num:是一个数字。
示例 1:sprintf() 将整数转为字符串
#include <stdio.h>
int main(void)
{
int num = 666;
char str[10];
sprintf(str, "%d", num);
puts(str);
return 0;
}运行结果如下。
666示例 2:sprintf() 将浮点数转换为字符串
#include <stdio.h>
int main(void)
{
double pi = 3.14159;
char str[20];
sprintf(str, "%.2f", pi); // 保留两位小数
printf("浮点数:%.5f\n", pi);
printf("字符串:%s", str);
return 0;
}运行结果如下。
浮点数:3.14159
字符串:3.14分析:
sprintf() 函数的使用非常灵活,它不仅可以用于处理不同类型的数字,还可以进行格式化控制。但需要注意的是,如果提供的 “字符数组 str 的空间” 不足以存储 “格式化后的字符串(包括结尾的空字符 '\0')” ,则可能会导致缓冲区溢出。
使用 snprintf() 函数(推荐)
snprintf() 函数是 sprintf() 的更安全版本。它接受一个额外的参数来指定目标字符数组的最大大小,从而防止缓冲区溢出。
语法:
snprintf(str, size, format, num)说明:
snprintf() 函数接收以下 3 种参数。
str(char *):用于保存结果。size(size_t):目标字符数组的最大大小(包括结尾的空字符 '\0')。format(const char *):是预定义好的格式。num:是一个数字。
示例 3:使用 snprintf() 将整数转换为字符串
#include <stdio.h>
int main(void)
{
int num = 12345;
char str[10];
int result = snprintf(str, sizeof(str), "%d", num);
if (result >= sizeof(str))
{
printf("警告:字符串被截断!\n");
}
printf("原数字:%d\n", num);
printf("字符串:%s", str);
return 0;
}运行结果如下。
原数字:12345
字符串:12345示例 4:snprintf() 将浮点数转换为字符串
#include <stdio.h>
int main(void)
{
double num = 98.765;
char str[15];
snprintf(str, sizeof(str), "%.3f", num);
printf("浮点数:%.5f\n", num);
printf("字符串:%s", str);
return 0;
}运行结果如下。
浮点数:98.76500
字符串:98.765分析:
想要将数字转换为字符串,我们更推荐使用 snprintf() 函数来实现。主要是因为它提供了缓冲区大小的控制,这样可以帮助我们编写更安全的代码。
使用 itoa() 函数(非标准)
在 C 语言中,我们还可以使用 itoa() 函数来将一个整数转换为一个字符串。其中,itoa 是 “int to ascii” 的缩写。
注意: itoa() 函数不是标准 C 语言的一部分,在某些编译器(如 gcc)中可能不可用。
语法:
itoa(num, str, n)说明:
itoa() 函数接收以下 3 个参数。
num(int):是一个整数。str(char *):是一个字符数组,用于保存结果。n(int):表示多少进制,比如 10 表示十进制。
示例 5:itoa() 将数字转为字符串
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num = 666;
char str[10];
itoa(num, str, 10);
puts(str);
return 0;
}
运行结果如下。
666分析:
itoa() 函数只适用于将整数转换为字符串。不过由于它不是标准函数,因此不建议在需要跨平台兼容性的代码中使用。在实际项目开发中,我们应该优先考虑使用 sprintf() 或更安全的 snprintf()。
