二维数组 += 1 给我负数

A 2D array += 1 gives me negative numbers

我的 C 程序有问题;我不知道为什么我的二维数组给我负数。

memset数组:

memset(array , 0 , sizeof(array[0][0]) * 26 * 26);

我只是读了一个文件,当我在 'a' 和 'z' 之间有 2 个字符时,我做了一个简单的 :

array[c - 'a'][d - 'a'] += 1;

拥有

char c , d;

但是当我这样做时

printf("le : %d\n" , array['l' - 'a']['e' - 'a']);

我得到:

le : -34

但这根本不可能。

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc , char * argv[])
{
    char proba[26][26];
    memset(proba , 0 , sizeof(proba[0][0]) * 26 * 26);
    FILE * fic;
    char c , d;
    fic = fopen(argv[2] , "r");
    if(fscanf(fic , "%c" , &c) != 1) return 2;
    while(!feof(fic))
    {
        if(fscanf(fic , "%c" , &d) == 1)
        {
            if(c >= 'a' && c <= 'z' && d >= 'a' && d <= 'z')
            {
                printf("%c%c %d - " , c , d , proba[c - 'a'][d - 'a']);
                proba[c - 'a'][d - 'a'] += 1;
            }
        }
        c = d;
    }
    fclose(fic);
    printf("\nProbability of %c%c is %f\n" , argv[1][0] , argv[1][1] , (float)proba[argv[1][0] - 'a'][argv[1][1] - 'a'] / (26 * 26));
}

// use ./main le file.txt

编辑:已解决 - 菜鸟错误,使用二维数组 char 保存整数 ...

再次感谢 Whosebug。

改变一下

char proba[26][26];

int proba[26][26];

您已经在 printf() 格式说明符中使用 %d,稍后将转换为 float