一、使用 sprintf 函数

1、基本介绍
  • sprintf 函数用于将格式化的数据写入字符串
int sprintf(char *str, const char *format, ...);
参数说明
str目标字符串的指针
format格式化字符串,用于指定输出的格式
可选参数,用于替换格式化字符串中的占位符
2、演示
  1. 将整数转换为字符串
#include <stdio.h>

int main() {

    int num = 12345;

    char numStr[20];
    sprintf(numStr, "%d", num);

    printf("字符串: %s\n", numStr);

    return 0;
}
# 输出结果

字符串: 12345
  1. 将多个整数转换为字符串
#include <stdio.h>

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
  1. 将浮点数转换为字符串
#include <stdio.h>

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、基本介绍
  1. snprintf 函数用于将格式化的数据写入字符串,与 sprintf 函数类似,但可以指定写入的最大字符数,避免缓冲区溢出,是更加安全的函数
int snprintf(char *str, size_t size, const char *format,...);
参数说明
str目标字符串的指针
size目标字符串的最大长度
format格式化字符串,用于指定输出的格式
可选参数,用于替换格式化字符串中的占位符
  1. sprintf_s 函数是微软提供的与 snprintf 函数类似,用于将格式化的数据写入字符串,与 sprintf 函数类似,但可以指定写入的最大字符数,避免缓冲区溢出,是更加安全的函数
int sprintf_s(char *str, size_t size, const char *format,...);
参数说明
str目标字符串的指针
size目标字符串的最大长度
format格式化字符串,用于指定输出的格式
可选参数,用于替换格式化字符串中的占位符
2、演示
  1. 使用 snprintf 函数
#include <stdio.h>

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
  1. 使用 sprintf_s 函数
#include <stdio.h>

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、基本介绍
  1. itoa 函数用于将整数转换为字符串
char* itoa(int value, char*string, int radix);
参数说明
value要转换的整数
string目标字符串
radix进制数
  1. _itoa 函数用于将整数转换为字符串,相比于 itoa 函数更加安全
char* _itoa(int value, char*string, int radix);
参数说明
value要转换的整数
string目标字符串
radix进制数
  1. _itoa_s 函数用于将整数转换为字符串,相比于 _itoa 函数更加安全
errno_t _itoa_s(int value, char*string, size_t size, int radix);
参数说明
value要转换的整数
string目标字符串
size目标字符串的最大长度
radix进制数
2、演示
  1. 使用 itoa 函数
#include <stdio.h>
#include <stdlib.h>

int main() {

	int num = 12345;

	char str[20];
	itoa(num, str, 10);

	printf("字符串: %s\n", str);

	return 0;
}
# 输出结果

字符串: 12345
  1. 使用 _itoa 函数
#include <stdio.h>
#include <stdlib.h>

int main() {

	int num = 12345;

	char str[20];
	_itoa(num, str, 10);

	printf("字符串: %s\n", str);

	return 0;
}
# 输出结果

字符串: 12345
  1. 使用 _itoa_s 函数
#include <stdio.h>
#include <stdlib.h>

int main() {

	int num = 12345;

	char str[20];
	_itoa_s(num, str, sizeof(str), 10);

	printf("字符串: %s\n", str);

	return 0;
}
# 输出结果

字符串: 12345

四、手动实现转换

1、具体实现
#include <stdio.h>

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' 的作用
  1. str[i++] = num % 10 + '0'; 这行代码的作用是将数字转换为对应的字符,即将数字 0 ~ 9 转换为对应的字符 '0' ~ '9'

  2. 在 ASCII 编码中,字符 '0' 的 ASCII 码是 48,字符 '1' 的 ASCII 码是 49,依此类推,字符 '9' 的 ASCII 码是 57

  3. 因此,数字 0 转换为字符 '0' 的方法如下

char num_char = 0 + '0';
  1. 类似地,数字 5 转换为字符 '5' 的方法如下
char num_char = 5 + '0';
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐