鍍金池/ 問答/C  Linux/ C語(yǔ)言數(shù)組編譯通過運(yùn)行時(shí)報(bào)段錯(cuò)誤?

C語(yǔ)言數(shù)組編譯通過運(yùn)行時(shí)報(bào)段錯(cuò)誤?

D.R的C程序設(shè)計(jì)語(yǔ)言(第二版)問題1-14打印輸入中各個(gè)字符出現(xiàn)頻率的直方圖。ACSII十進(jìn)制值作為ch數(shù)組的下標(biāo),對(duì)應(yīng)的下標(biāo)的數(shù)組值+1。然后用ch_sub和ch_value數(shù)組分別保存用對(duì)應(yīng)的下標(biāo)和值。編譯沒錯(cuò)誤,運(yùn)行立即報(bào)段錯(cuò)誤。自學(xué)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

回答
編輯回答
悶油瓶
int ch_sub[j];
int ch_value[l];

中的 i 和 j 的值是隨機(jī)值, 定義數(shù)組是未定義的.

2018年8月3日 00:19