重新分配相同的数组

重新分配相同的数组

这是代码片段,它属于一个更大的项目。基本上,它必须存储和打印一个字符在一个文本块中出现的次数。我不明白的是如何重新分配相同的数组。。。。

void subiect2_subpunct_c(char* nume_fisier)
{
    FILE *f1;
    char a;
    int i = 0, j, ok;
    char *caracter, *tempc;
    int *frecventa, *tempf;

    caracter = (char*)malloc(sizeof(char));
    frecventa = (int*)malloc(sizeof(int));

    f1 = fopen(nume_fisier, "r");

    while (a = fgetc(f1))
    {
        ok = 0;

        if (i == 0)
        {
            frecventa[i] = 1;
            caracter[i++] = a;
        }
        else
        {
            for (j = 0; j < i; j++)
            {
                if (caracter[j] == a)
                {
                    frecventa[j]++;
                    j = i;
                    ok = 1;
                }
            }

            if (ok == 0)
            {
                tempc = (char*)realloc(caracter, (i + 1)*sizeof(char));
                tempf = (int*)realloc(frecventa, (i + 1)*sizeof(int));

                caracter = tempc;
                frecventa = tempf;

                frecventa[i] = 1;
                caracter[i++] = a;
            }
        }
    }

    for (j = 0; j < i; j++)
    {
        printf("\n %c (%d)", caracter[j], frecventa[j]);
    }

    fclose(f1);
}

最佳答案

问题并非来自realloc()。如果您读取一个文件并读取其中的字符,您应该检查如下所示的一些事实:
文件已成功打开:测试fopen()的结果:

  f1 = fopen(nume_fisier, "r");
  if(f1==NULL)perror ("Error opening file");

未到达文件结尾:测试fgetc()的结果
 a=fgetc(f1);
 while(a!=EOF){
    ...
    a=fgetc(f1);
 }

你的代码失败了,因为a=fgetc(f1)总是正确的(我不知道为什么!):程序从未脱离while循环。
再见,
弗兰西斯

关于c - 重新分配相同的数组似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21289771/

10-11 21:23