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

C语言中空/未完全填充数组的元素值是否为'\0'?附阿姆斯特朗数代码疑问

问题解答

关于未完全填充/未初始化数组的元素值问题

  • C语言中,在函数内部定义的、未显式初始化的自动存储类型(auto)数组,元素值是未定义的垃圾值,不会被默认赋值为'\0'或者0。
    • 你观察到在线编译器测试时结论成立,是因为部分在线编译环境为了方便调试,默认会对栈内存做清零初始化,刚好让你未填充的数组元素值为0,这属于特殊情况,不是C语言的标准规定。
    • GCC默认编译时不会对自动类型的栈内存做初始化操作,未填充的数组元素都是栈上遗留的随机值,所以你的判断逻辑会失效。
  • 如果你想让数组默认初始化为0,可以在定义时显式写int sto[20] = {0};,此时所有未显式赋值的元素都会被初始化为0,你用sto[i] != '\0'的判断逻辑才能正常工作。

你当前代码的核心问题

  1. 没有给int数组显式设置结束标记,也没有利用第一个循环已经得到的有效元素个数做循环边界:你第一个拆分数字的while循环结束后,变量i已经存储了你拆分出来的数字的总个数,第二个求和循环直接循环i次即可,不需要判断终止标记。
  2. 不要用pow函数计算整数的三次方:pow是浮点数运算函数,存在精度误差,整数三次方直接写sto[i] * sto[i] * sto[i]更稳妥。

修正后的核心逻辑参考

// 第一个拆分数字的循环保持不变
while(num != 0) 
{
    sto[i] = num%10;
    num = num / 10;
    i++;
}
// 第二个循环直接用拆分得到的元素个数做上限
int len = i;
i = 0;
cub = 0;
while(i < len)
{
   int n = sto[i];
   cub += n * n * n;
   i++;
}

内容的提问来源于stack exchange,提问作者A typical nerd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:09:04