伙计们!
我在用 C 语言声明数组时遇到问题。我必须用 Java 编写一个小程序来显示文本文件中每个字母的数量以及字母的总数。为了进一步教育自己,我也用 C 编写了所有作业。在 Java 中它完全可行,所以我想我对 C 中的数组有很大的误解。
我声明了一个大小为 26 的 int 数组。所以我认为编译器为 26 个整数分配了内存。我的输出是一个带有 printf("%d",alphabet[m]);
的简单 for 循环。但我得到奇怪的结果。有些索引是正确的,有些有很大的数字,有些甚至有负数。如果我将数组大小更改为 int alphabet[2500];
它完全可行,但我不知道为什么......这没有任何意义,因为索引 26 他应该分配 26整数。好吧,显然这是有道理的,否则它不会起作用。有没有人给我提示,我将不胜感激!
文本总共有 5000 个字符(不包括空格),如果这很重要,平均每个字母约 150-200 个字符。
我的代码:
int len;
int alphabet[26];
int m;
FILE *handler;
if(handler!=NULL)
{
for(m=0;m<=25;m++)
{
char buffer = 0;
handler=fopen("text.txt","r");
while((buffer=fgetc(handler)) != EOF)
{
if(buffer==(char)65+m)
{
alphabet[0+m]++;
}
if(isalpha(buffer))
{
len++;
}
}
fclose(handler);
}
}
[...否则打印(错误)和 fclose ...]
for(m=0;m<=25;m++)
{
printf("[%c] n: %5d \n",65+m,alphabet[m]);
}
最佳答案
您确实声明了正确大小的数组,但没有对其进行初始化。这意味着它可能充满了随机数据。在使用 ++
运算符之前确保将其全部设置为零:
int alphabet[26] = { 0 };
关于c - 在 C 中声明数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595464/