C语言如何将char数组转换为int?sscanf与atoi使用无效怎么办
问题排查与修复
代码核心错误
- 未初始化
str数组就调用strlen():strlen()通过查找字符串末尾的\0结束符计算长度,未初始化的数组内容是随机垃圾值,strlen返回结果完全不可预测,属于未定义行为。 - 存入数组的是整数数值而非数字字符:
sscanf、atoi只能识别数字ASCII字符,比如数字1对应的字符是'1',ASCII值为49,你直接存入整数1属于不可见控制字符,无法被识别为数字。 - 数组下标使用错误且未补字符串结束符:C语言数组下标从0开始,你的循环从i=1开始赋值,
str[0]为随机值,且赋值结束后没有手动添加\0结束符,不符合C语言字符串的格式要求,所有字符串处理函数都无法正常处理。
正确实现代码
#include <stdio.h> #include <stdlib.h> int main() { char str[10]; int x, y; // 示例:向str存入数字字符串"1234" for(int i = 0; i < 4; i++){ str[i] = '0' + (i + 1); // 整数加字符'0'即可转为对应数字的ASCII字符 } str[4] = '\0'; // 必须手动添加字符串结束符 // 两种转换方式都可以正常生效 sscanf(str, "%d", &x); printf("The value of x : %d\n", x); y = atoi(str); printf("The value of y : %d\n", y); return 0; }
上述代码运行后输出如下:
The value of x : 1234 The value of y : 1234
内容的提问来源于stack exchange,提问作者nonkooshy
相关产品推荐
相关产品推荐

