C:读取文件以跟踪每个扩展的ASCII外观计数

Moo*_*Cow 0 c ascii

我目前正在尝试读取文件中每个字符的计数.该文件已加密,因此它包含ascii值0到255.我的最终目标是返回最常出现的字符.

问题

在阅读完文件后,我打印数组以进行调试.令我惊讶的是,数组只计算字符0 - 127(不扩展字符).超过127的所有索引都是0.可悲的是,该文件包含大量的扩展ascii.我不知道问题是什么.我相信这将是我的比较或数据类型.

char breakKey(FILE * cryFile, int keyLength) {
    fseek(cryFile, 0, SEEK_SET);
    unsigned int count[256] = {0};
    char ch;
    int c = 0;
    while((ch = fgetc(cryFile)) != EOF){
        for(int i = 0; i < 255 ; i++){
            if(i == (int) ch) {
                count[i]++;             
            }   
        }
    }

    for(int i = 0; i < 255 ; i++){
        printf("%d : %d \n", i, count[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*key 5

根据实现,角色ch可以是签名的或未签名的.在你的测试中,它显然是签名的.使它成为int一种标准做法,因为它EOF是一个不能成为一个字符的负值.

沿着这些方向,将字符与数组索引匹配的循环无效.你需要做的就是

count[(unsigned char)ch]++; 
Run Code Online (Sandbox Code Playgroud)

而不是

for(int i = 0; i < 255 ; i++){
    if(i == (int) ch) {
        count[i]++;             
    }   
}
Run Code Online (Sandbox Code Playgroud)