一、使用 sprintf 函数
1、基本介绍
sprintf 函数用于将格式化的数据写入字符串
int sprintf(char *str, const char *format, ...);
参数说明str目标字符串的指针format格式化字符串,用于指定输出的格式…可选参数,用于替换格式化字符串中的占位符2、演示
将整数转换为字符串
#include
int main() {
int num = 12345;
char numStr[20];
sprintf(numStr, "%d", num);
printf("字符串: %s\n", numStr);
return 0;
}
# 输出结果
字符串: 12345
将多个整数转换为字符串
#include
int main() {
int num1 = 12345;
int num2 = 67890;
char numStr[20];
sprintf(numStr, "%d %d", num1, num2);
printf("字符串: %s\n", numStr);
return 0;
}
# 输出结果
字符串: 12345 67890
将浮点数转换为字符串
#include
int main() {
double num = 3.14159;
char numStr[20];
sprintf(numStr, "%.2f", num);
printf("字符串: %s\n", numStr);
return 0;
}
# 输出结果
字符串: 3.14
二、使用 snprintf 函数、sprintf_s 函数
1、基本介绍
snprintf 函数用于将格式化的数据写入字符串,与 sprintf 函数类似,但可以指定写入的最大字符数,避免缓冲区溢出,是更加安全的函数
int snprintf(char *str, size_t size, const char *format,...);
参数说明str目标字符串的指针size目标字符串的最大长度format格式化字符串,用于指定输出的格式…可选参数,用于替换格式化字符串中的占位符sprintf_s 函数是微软提供的与 snprintf 函数类似,用于将格式化的数据写入字符串,与 sprintf 函数类似,但可以指定写入的最大字符数,避免缓冲区溢出,是更加安全的函数
int sprintf_s(char *str, size_t size, const char *format,...);
参数说明str目标字符串的指针size目标字符串的最大长度format格式化字符串,用于指定输出的格式…可选参数,用于替换格式化字符串中的占位符2、演示
使用 snprintf 函数
#include
int main() {
int num1 = 12345;
int num2 = 67890;
char numStr[20];
sprintf_s(numStr, sizeof(numStr), "%d %d", num1, num2);
printf("字符串: %s\n", numStr);
return 0;
}
# 输出结果
字符串: 12345 67890
使用 sprintf_s 函数
#include
int main() {
double num1 = 1.234;
double num2 = 5.678;
char numStr[20];
snprintf(numStr, sizeof(numStr), "%.2f %.2f", num1, num2);
printf("字符串: %s\n", numStr);
return 0;
}
# 输出结果
字符串: 1.23 5.68
三、使用 itoa 函数、_itoa 函数、_itoa_s 函数
1、基本介绍
itoa 函数用于将整数转换为字符串
char* itoa(int value, char*string, int radix);
参数说明value要转换的整数string目标字符串radix进制数_itoa 函数用于将整数转换为字符串,相比于 itoa 函数更加安全
char* _itoa(int value, char*string, int radix);
参数说明value要转换的整数string目标字符串radix进制数_itoa_s 函数用于将整数转换为字符串,相比于 _itoa 函数更加安全
errno_t _itoa_s(int value, char*string, size_t size, int radix);
参数说明value要转换的整数string目标字符串size目标字符串的最大长度radix进制数2、演示
使用 itoa 函数
#include
#include
int main() {
int num = 12345;
char str[20];
itoa(num, str, 10);
printf("字符串: %s\n", str);
return 0;
}
# 输出结果
字符串: 12345
使用 _itoa 函数
#include
#include
int main() {
int num = 12345;
char str[20];
_itoa(num, str, 10);
printf("字符串: %s\n", str);
return 0;
}
# 输出结果
字符串: 12345
使用 _itoa_s 函数
#include
#include
int main() {
int num = 12345;
char str[20];
_itoa_s(num, str, sizeof(str), 10);
printf("字符串: %s\n", str);
return 0;
}
# 输出结果
字符串: 12345
四、手动实现转换
1、具体实现
#include
void reverse(char* str) {
int i = 0;
int j = strlen(str) - 1;
while (i < j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
i++;
j--;
}
}
void numToStr(int num, char* str) {
// 判断是否为负数,0 为非负数(正数或 0),1 为负数
int isNegative = 0;
// 如果是负数
if (num < 0) {
isNegative = 1;
num = -num; // 转为正数处理
}
int i = 0;
do {
str[i++] = num % 10 + '0';
num /= 10;
} while (num > 0);
if (isNegative) {
str[i++] = '-';
}
str[i] = '\0';
reverse(str);
}
int main() {
int num1 = 12345;
char num1Str[20];
numToStr(num1, num1Str);
printf("字符串: %s\n", num1Str);
int num2 = -6789;
char num2Str[20];
numToStr(num2, num2Str);
printf("字符串: %s\n", num2Str);
return 0;
}
# 输出结果
字符串: 12345
字符串: -6789
2、+ '0' 的作用
str[i++] = num % 10 + '0'; 这行代码的作用是将数字转换为对应的字符,即将数字 0 ~ 9 转换为对应的字符 '0' ~ '9'
在 ASCII 编码中,字符 '0' 的 ASCII 码是 48,字符 '1' 的 ASCII 码是 49,依此类推,字符 '9' 的 ASCII 码是 57
因此,数字 0 转换为字符 '0' 的方法如下
char num_char = 0 + '0';
类似地,数字 5 转换为字符 '5' 的方法如下
char num_char = 5 + '0';