c - 在 C 中声明数组的大小

标签 c arrays

伙计们!

我在用 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/

相关文章:

python - Arduino 无法与以太网客户端连接

C fscanf 从文件错误中读取数据

java - Java 中的数组按降序逆序排列

javascript - 比较两个对象数组

Javascript:如何找到第一个重复值并返回其索引?

c++ - 我可以从 C 或 C++ 外部控制 Chrome 扩展程序吗?

c - 获取数字数组的第 i 个组合

C 编程、分段故障核心转储

php - 显示与数据库数据匹配的某些数组数据

c - 防止 OpenGL 缓冲帧