C语言数组编译通过运行时报段错误?

D.R的C程序设计语言(第二版)问题1-14打印输入中各个字符出现频率的直方图。ACSII十进制值作为ch数组的下标,对应的下标的数组值+1。然后用ch_sub和ch_value数组分别保存用对应的下标和值。编译没错误,运行立即报段错误。自学C的萌新,各位大佬轻喷。

#include <stdio.h>

main()
{
        int c,i,j,l;
        int ch[128];
        int ch_sub[j];
        int ch_value[l];

        i= j = l =0;

        for (i = 0; i < 128; ++i)
                ch[i] = 0;

        while ((c = getchar()) != EOF)
                ++ch[c];
     
       for (i = 0; i < 128; ++i){
                if (ch[i] > 0){
                        ch_sub[j] = i;
                        ch_value[j] = ch[i];
                        ++j;
                }
        }
        for (l = 0; l < j; ++l)
                printf("%c\t%d\n",ch_sub[l],ch_value[l]);
}

clipboard.png

阅读 2.2k
1 个回答
int ch_sub[j];
int ch_value[l];

中的 i 和 j 的值是随机值, 定义数组是未定义的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题