我有一个问题希望你能帮助我。
我正在尝试从我将对其执行频率分析的文件中读取字符。我决定最简单的方法是拥有一个索引为 0-255 的数组,并在每次读取 char 时将相应的索引(从读取的 chars 十进制值)增加一。我遇到的问题是,似乎只保存了 7 位字符。在下面查看代码。
int frequency(FILE *freqfilep)
{
printf("frequency function called!\n");
int start = 1;
int *frqarray = calloc(256,sizeof(int));
unsigned char tecken;
FILE *fp;
fp = fopen("freqfile.txt","r");
if (fp == NULL)
{
perror("Error in opening file");
start = 0;
}
do
{
tecken = fgetc(fp);
if (feof(fp))
{
start = 0;
}
else
{
frqarray[(int)tecken] ++;
}
}
while (start != 0);
printf("a%d\n", frqarray[97]);
printf("b%d\n", frqarray[98]);
printf("c%d\n", frqarray[99]);
printf("1%d\n", frqarray[49]);
printf("2%d\n", frqarray[50]);
printf("3%d\n", frqarray[51]);
printf("å%d\n", frqarray[134]);
printf("ä%d\n", frqarray[132])
printf("ö%d\n", frqarray[148]);
fclose(fp);
return 0;
}
我正在读取的文件包含以下字符:
aaa bbb ccc 111 222 333 ååå äää ööö
所以我代码底部的 printf 应该说:
a3
b3
c3
13
23
33
å3
ä3
ö3
但结果是
a3
b3
c3
13
23
33
å0
ä0
ö0
所以我猜测读取 8 位字符存在一些问题,我在论坛上看了一些,发现一些相对相似的帖子,答案是我需要使用这样的缓冲区,fread(&buffer, 256, 1, file);
但我不知道如何实现它。