gpt4 book ai didi

c - 段错误和打印没有循环的数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:53 25 4
gpt4 key购买 nike

我只是想运行一个简单的程序来使用数组计算空格、数字和其他字符的数量。下面是我的程序:

void main(){


int digit_holders[10]={0};
int ch;
int i, white_space=0,other=0;

while((ch=getchar())!=EOF){

if(isspace(ch))
white_space++;
else if(isdigit(ch))
digit_holders[ch-'0']++;
else
other++;
}
digit_holders[12]=20;
printf("\n White spaces=%d\n Other=%d\n",white_space,other);
for(i=0;i<=9;i++)
printf("\ndigit_holders[%d]=%d\n",i,digit_holders[i]);
printf("\n digit_holder[12]=%d\n",digit_holders[12]);
}

2 个问题:

  1. 为什么 digit_holders[12] 仍然设法打印分配的值,尽管它超出了范围?为什么它不显示段错误?当我将 for 循环检查更改为 i<=11 时会发生同样的情况,它设法打印 digit_holders[11]=0(它不应该).. 但是当我替换 11/10 和 1100 即 digit_holders[1100] 在任何一种情况下,程序都会崩溃(段错误)。为什么会这样?
  2. 有没有更简单的方法来打印这个数组的元素而不使用 for 循环?

-谢谢!

最佳答案

C 中没有范围检查,所以它给出了最佳射击(即足够的绳子吊死你自己和家人)。

操作系统发生段错误。即尝试访问未分配给进程的内存。

关于c - 段错误和打印没有循环的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com