字符串转换为整数、整数转换为字符串

整数转换为字符串

sprintf()它的功能是将各种类型的数据格式化为字符串,并存储到一个字符数组中。

sprintf 是 C 语言标准库中的一个函数,用于将格式化的数据写入一个字符串中。它的用法与 printf 类似,但不同的是,printf 输出到标准输出(通常是屏幕),而 sprintf 输出到一个字符数组(字符串)。

sprintf 函数的语法:

int sprintf(char *str, const char *format, ...);

  • str:指向存储格式化字符串的字符数组。
  • format:格式控制字符串,与 printf 的格式相同,可以包含普通字符和格式说明符(如 %d%s 等)。
  • ...:可变参数,对应于 format 中的格式说明符。

返回值:

  • 返回写入到字符串中的字符数(不包括终止的 \0 字符)。

常用的格式说明符:

  • %d:整型数字(有符号)。
  • %u:无符号整型数字。
  • %f:浮点数。
  • %s:字符串。
  • %c:单个字符。

示例代码:

#include <stdio.h> 
int main() 
{ 
int num = 1234;
float fnum = 3.14159; char str[50]; // 存储格式化后的字符串 // 使用 sprintf 将整数转换为字符串 

sprintf(str, "整数: %d", num); 
printf("格式化后的字符串: %s\n", str); // 使用 sprintf 格式化多个变量

sprintf(str, "整数: %d, 浮点数: %.2f", num, fnum);
printf("格式化后的字符串: %s\n", str); 

return 0;
 }

输出结果:

格式化后的字符串: 整数: 1234 格式化后的字符串: 整数: 1234, 浮点数: 3.14

在这个例子中,sprintfnumfnum 分别格式化为字符串,并将结果存储在 str 中。

字符串转换为整数

strtol 函数是 C 语言标准库中的一个函数,用于将字符串转换为长整型(long)数值。与简单的 atoi 不同,strtol 提供了更多的功能,例如进制选择和错误处理,适合更复杂的场景。

函数定义:

long int strtol(const char *str, char **endptr, int base);

参数说明:

  1. str:要转换的字符串。
  2. endptr:这是一个指向字符指针的指针,用于存储转换过程中遇到的第一个非数字字符的地址。如果不关心,可以传入 NULL
  3. base:指定进制(如 10 表示十进制,16 表示十六进制)。base 的有效值范围是 2 到 36,或者为 0。如果 base 为 0,则根据字符串的前缀自动判断进制:
    • 如果字符串以 0x0X 开头,则按十六进制处理。
    • 如果以 0 开头,则按八进制处理。
    • 否则按十进制处理。

返回值:

  • 转换后的 long 类型数值,如果无法转换则返回 0。
  • 如果转换过程中出现溢出或其他错误,可能返回 LONG_MAXLONG_MIN,并设置 errno

示例代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> // 用于检查错误 
int main() 
{ char str[] = "1234abc"; 
  char *end; long num; // 将字符串按十进制转换为长整型数值 
  num = strtol(str, &end, 10); // 检查是否存在有效的数字部分 
  if (end == str) 
   { printf("没有有效的数字\n"); } 
  else { printf("转换后的数字: %ld\n", num);
  printf("未转换的部分: %s\n", end); } // 错误检查:如果超出范围,设置 errno 
  if (errno == ERANGE) { printf("数字超出范围\n");
    } return 0; }

运行结果:

转换后的数字: 1234 未转换的部分: abc

功能特性:

  1. 进制处理:可以通过 base 参数指定进制,适用于二进制、八进制、十进制、十六进制等格式。
  2. 错误处理:可以使用 endptr 来检查是否成功转换,同时使用 errno 来检测溢出等错误。
  3. 非数字字符处理:遇到非数字字符时,strtol 会停止转换,并通过 endptr 指向未处理部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值