簡體   English   中英

從文件中讀取數組

[英]Reading an array from a file

我從 Java 和 C# 回到 C。我被下面的簡單程序困住了,試圖從一個 function 的文件中讀取兩個 arrays。有人能指出我在哪里搞砸了嗎?

編譯器說:錯誤:二進制 * 的無效操作數(有“int *”和“int *”)

文件格式為

    4
    1   2   3   4
    23  23  14  11

我的ReadFromFile function 需要從文件中填充緩沖區AB

#include<stdio.h>

void ReadFromFile (const char* file_name, int *A, int *B, int *length)
{
    FILE* file = fopen (file_name, "r");
    fscanf (file, "%d", length);            
    int i;
    for(i = 0; i < length; i++)
    {
        fscanf (file, "%d", A+i); 
    }  
    for(i = 0; i < length; i++)
    {
        fscanf (file, "%d", B+i); 
    }   
    fclose (file);        
}

int main()
{
    int *A; int *B; int length;
    ReadFromFile("input.txt", A, B, &length);

    return 0;
}
int main()
{
    int A; int B; int length;
    ReadFromFile("input.txt", &A, &B, &length);

    return 0;
}

嘗試使用 A 和 B 作為變量而不是指針,並使用地址調用 function。

我不確定這是否是問題所在。 但試一試。

抱歉,我對 int 指針感到困惑。 我猜你想要的是int[] A實際上與int* A相同的東西。 但是你必須為數組分配一些 memory 或者用給定的大小初始化它。

在您的 function 中,您使用 A+i 訪問 memory 中未由您分配的位置。 換句話說:您需要先撥打 malloc 才能獲得 memory。

想想你的結構:你有地址變量 A 和 B,但你從未將它們指向分配的地址 memory。如果你想在你的 function 之前這樣做,你需要知道數組的長度。 如果你想在你的 function 中做,你需要傳遞 A 和 B 的地址來分配給它:

void ReadFromFile (const char* file_name, int** A, int** B, int* length)
{
  FILE* file = fopen (file_name, "r");
  fscanf (file, "%d", length);
  *A = (int*) malloc(length * sizeof(int))
  // now use (*A)+i

然后你會改變主要

int* A; int* B; int length;
ReadFromFile("input.txt", &A, &B, &length);

首先, AB是指向垃圾的指針,如果您真的想存儲某些東西(或者預計會出現分段錯誤或 memory 損壞),則需要分配空間。

它在抱怨你的 for 循環。 length永遠不會被初始化,所以你無論如何都會發送一個指向垃圾數據的指針(或者它永遠不會在從文件讀取時填充)。

i < length無效(從這個意義上說),因為您將int值與地址或int *進行比較(這沒有意義)。 你可能是說i < *length ; 因為length是一個指針,需要對其實際值進行取消引用。

撥打您的 function 時,您應該提供地址參考,例如 &A 和 &B

這就是您應該如何正確閱讀文本文件:)

FILE *file = fopen(file_name, "r");
while(file != EOF){
    fscanf(...)
}

編輯

您不需要使用雙指針。 只需在main()整數Int A,B中初始化並為您的方法提供它們的地址。

void ReadFromFile (const char* file_name, int *A, int *B, int *length)
/* ... */
    for(i = 0; i < length; i++)
    {
        fscanf (file, "%d", A+i); 
    }

您已經從main()傳入了一個 integer A ,但在這里您試圖訪問完全不相關的B也是如此。 您的意思是將AB分配為arrays嗎?

例如改變:

int *A; int *B; int length;

int A[100], B[100], length;

或類似的東西。 (也許一旦你知道你需要多少就動態分配 arrays - 或者用malloc(3)分配它們並在需要時用realloc(3)增加它們。)

暫無
暫無

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

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