atoi函数理解字符存储

本文探讨了编程中使用atoi函数时可能遇到的问题,特别是当字符串未以''结束时会导致的错误。举例说明,未正确终止的字符串可能导致额外的字符被错误解析。atoi函数在遇到非数字字符时会停止转换。文章还强调了字符'0'到'9'在ASCII值中的表示,并指出以%c和%d打印字符时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程中容易犯错的就是所要处理的字符串没有以’\0’结尾,如下代码

typedef struct example{
  ...
  char serial_number[4];
  int  index;
  ...
}TEST_PARAM;

TEST_PARAM test_param;

memset(&test_param, 0, sizeof(test_param));
memcpy(test_param.serial_number, "1234", sizeof(test_param.serial_number));
test_param.index = 49;

printf("serial_number = %d\n", atoi(test_param.serial_number));

输出打印不是1234,而是12341,只要index赋值在[48,57]之间,都会出错。


atoi函数的具体实现细节可以查看这里
当所处理的字符为非对应的数字时便停止。

这里需要搞清楚的是字符‘0’~‘9’而不是数字1~9。

字符在内存中是以其对应的ascii值存储中,如下表对应关系(出处
这里写图片描述
当以%c输出打印时,显示的是其符号形式(symbol),当以%d输出打印时,显示的时其对应的ascii值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值