You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:18:02