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

C语言拆分数字求和时出现Segmentation error问题求助

修复C语言数位求和函数的段错误问题

你的代码里有两个关键问题引发了错误,一步步来修正:

1. 函数参数缺少类型声明

C语言要求函数参数必须明确指定类型,你写的num_test(score)没有给score定义类型,旧版C标准会默认把它当作int,但现代编译器会抛出警告,要是调用时传入非int类型(比如不小心传了字符串指针),就会触发未定义行为,包括段错误。

修改后的函数代码:

int num_test(int score) {
  int total = 0;
  while(score) {
    total += (score % 10);
    score /= 10;
  }
  return total;
}

如果专门处理正整数,也可以用unsigned int限定参数,避免负数取模的不确定行为。

2. 检查主函数的调用方式

段错误大概率是调用函数时传错了参数类型。比如你要是写了这样的错误调用:

#include <stdio.h>

int num_test(int score);

int main() {
    // 错误:传入字符串指针,而非整数
    printf("%d\n", num_test("123"));
    return 0;
}

字符串的地址会被当作整数传入函数,这种非法类型转换会引发未定义行为,直接导致段错误。

正确的调用要传入整数常量或整数变量:

#include <stdio.h>

int num_test(int score);

int main() {
    int num = 12345;
    // 正确:传入整数变量
    printf("数位和:%d\n", num_test(num));
    // 也可以直接传整数常量
    printf("数位和:%d\n", num_test(678));
    return 0;
}

额外提示

当前函数处理0时会返回0,这是正确的(0的数位和就是0)。如果要确保传入的是正整数,可以在函数开头加个判断处理负数:

int num_test(int score) {
  if (score < 0) {
      score = -score; // 转为正数再计算
  }
  int total = 0;
  while(score) {
    total += (score % 10);
    score /= 10;
  }
  return total;
}

内容的提问来源于stack exchange,提问作者Veronika

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:20:35