簡體   English   中英

重新分配相同的數組似乎不起作用

[英]Reallocating same array seems to not work

這是代碼片段,它屬於一個更大的項目。 基本上,它必須存儲和打印字符在文本塊中出現的次數。 我真正理解的是如何重新分配相同的數組....

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() 如果您讀取文件並讀取其中的字符,您應該查看一些事實,如http://www.cplusplus.com/reference/cstdio/fgetc/所示:

  • 文件成功打開:測試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循環。

再見,

弗朗西斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM