2015-05-01 43 views
0

我想讀取函數中的元素並將它們存儲在main中的數組中。我使用了一個指向動態數組的指針,但它不起作用。當我尊敬指針時,我得到的地址是NULL,程序崩潰。地址沒有傳遞給從main到function的指針。 C

這裏是數組:從主

char* first_name = malloc(first_name_length*sizeof(char)); 

函數調用:

get_first_name(fp, first_name_length, first_name); 

函數聲明:

void get_first_name(FILE* fp, int length,char* first); 

函數定義:

void get_first_name(FILE* fp, int length, char* first){ 

    char c; 
    int i = 0; 
    int number_of_conversions; 

    number_of_conversions = fscanf(fp, "%c", &c); 

    while (!isspace(c)){ 

     first[i] = c; 

     number_of_conversions = fscanf(fp, "%c", &c); 

     i++; 
    } 
} 
+0

即使使用%c,fscanf也不會讀取空白字符。建議使用int c; c = fgetc(fp); – user3629249

回答

0

像下面將做的工作

void get_first_name(FILE* fp, int length, char* first) 
{ 

    int c; 
    int i = 0; 

    while (EOF != (c = fgetc(fp)) && (' ' != c) && (i < (length -1))) 
    { 
     first[i] = c; 
     i++; 
    } 
    // terminate the string 
    first[i] = '\0'; 
} 
+0

這仍然會導致程序崩潰 –

0
    在讀模式
  1. 打開文件

計劃生育=的fopen( 「file.txt的」, 「R」));

  1. 確保文件不爲空。使用fgetc()的 將有助於保持簡單。

    空隙get_first_name(FILE * fp的,INT長度,字符*第一)
    {
    炭℃;
    int i = 0;
    c = fgetc(fp);

    而(C = EOF & & isspace爲(C)!){
    第一個[I] = C;
    c = fgetc(fp);
    i ++;
    }}

3。如果您爲某種目的而使用fscanf(),則可以使用fseek()來檢查文件是否爲空。