C语言中将char数字字符转存为int数组时为何要减去字符'0'?
为什么C语言中char类型数字字符转整数需要减
'0' 核心原因
C语言的char类型本质存储的是字符对应的ASCII编码整数值,在ASCII编码规范中,数字字符'0'到'9'的编码是连续递增的:
'0'对应十进制ASCII值 48'1'对应十进制ASCII值 49- ...
'9'对应十进制ASCII值 57
比如你从输入中拿到字符'5',它存储在char数组中的实际值是53,如果你直接把这个值赋值给int数组,得到的是53而不是你需要的数字5。利用数字字符编码连续的特性,用当前数字字符减去'0'的编码值,就能得到字符对应的整数数值:'5' - '0' = 53 - 48 = 5
代码优化建议
你当前的写法存在两个可优化的点:
- 存储输入的
char string_test[50]数组长度为50,最多只能存储49位数字,需要预留1位空间存储字符串结束标记'\0',如果要存50位整数,需要把数组长度调整为至少51。 - 遍历转换时不要固定循环50次,应该先获取输入字符串的实际长度,只转换有效数字位,否则输入不足50位时,剩余的
'\0'字符减'0'会得到-48的异常值,参考优化写法:
#include <stdlib.h> #include <stdio.h> #include <string.h> int main () { // 预留结束符空间 char string_test [51]; scanf("%s", string_test); int len = strlen(string_test); int arr[50]; for (int i = 0; i < len; i++) { arr[i] = string_test[i] - '0'; } return 0; }
内容的提问来源于stack exchange,提问作者Hadi Jafari
相关产品推荐
相关产品推荐

