2016-01-28 87 views
-3

我有一個包含一組數字的文件。 我試圖將這些數字讀入數組中。我使用一個指針爲該數組分配內存,並從該文件讀入該位置。 由於某些原因,程序不會從文件中讀取超過5個值。整個文件沒有讀取

int main(int argc, char* argv[]) 
{ 
    int i=0, count=0; 
    //unsigned long int num[1000]; 
    unsigned long int *ptr; 
    ptr = (unsigned long int*) malloc (sizeof(unsigned long int)); 
    char file1[30], file2[30]; 
    int bin[1000][32]; 
    int ch; 

    argv++; 
    strcpy(file1,*argv); 

    FILE *fp; 
    fp=fopen(file1, "r"); 

    while((fscanf(fp,"%ld",ptr))==1) 
    { 
     ptr++; 
     count++; 
    } 

    ptr=ptr-count; 
    for(i=0; i<count;i++,ptr++) 
     printf("%ld\n",*ptr); 
    return 0; 
} 

輸入文件包含以下內容:

1206215586 
3241580200 
3270055958 
2720116784 
3423335924 
1851806274 
204254658 
2047265792 
19088743 

輸出僅僅是這樣的:提前

1206215586 
3241580200 
3270055958 
2720116784 
3423335924 

感謝。

+5

您嘗試讀取多個值到內存中只有一個值足夠大。 – usr2564301

回答

2

您需要分配足夠的空間來存儲整數。要這樣做,請使用原始指針上的realloc函數。

您編寫ptr++的事實使得在原始指針上調用realloc並保存結果變得很尷尬。所以最好不要使用ptr++。相反,您可以使用ptr[count]並將ptr始終指向分配的開始。

例如主循環可能是:

while((fscanf(fp,"%lu",&ptr[count]))==1) 
{ 
    count++; 

    void *new = realloc(ptr, (count+1) * sizeof(*ptr)); 
    if (!new) 
     break;  // maybe print error message, etc. 

    ptr = new;   
} 

// don't do this any more 
//  ptr=ptr-count; 
+0

注意:'void * new = ...'是確保這些代碼不會用C++編譯的一種方法。 ;-) – chux

+0

非常感謝。 :) – Aravind