2012-03-18 16 views
0
#include <stdio.h> 
#include <stdlib.h> 

#define MAX 20 
#define MAX_BASE 8 
#define ROW 9 
#define COLUMN_SCORE 12 
#define MAX_SKATER 4 

typedef struct{ 
      char name[MAX]; 
      int elements; 
      float baseval[MAX_BASE]; 
      int score[12][MAX_BASE]; 
      double total_score; 
      }SKATER; 

int getData(SKATER skater[MAX]); 


int main (void) 
{ 
    // Global Declarations 
    SKATER skater[MAX_SKATER]; 
    int num; 

    // Function calls 
    num = getData(skater); 

return 0; 
} 

/********************************* getData ************************************ 
Pre: 
Post: 
*/ 
int getData(SKATER skater[MAX_SKATER]) 
{ 
    // LOcal Declarations 
    FILE* fpIn; 
    int i = 0; 
    int k; 
    int j; 
    char buffer[100]; 

    // Statements 
    if((fpIn = fopen("lab6data.txt","r"))==NULL) 
    { 
    printf("File opening error"); 
    system("PAUSE"); 
    exit(100); 
    } 

    while(i < MAX_SKATER && fgets(buffer, sizeof(buffer) - 1, fpIn)) 
    { 
     sscanf(buffer,"%*c%19[^]%[^\n]", skater[i].name);  
     for(k = 0; k < MAX_BASE; k++) 
      printf("loop"); 
      sscanf(buffer,"%d", &skater[i].elements, skater[i].baseval); 
      for(j = 0; j < COLUMN_SCORE; j++) 
      { 
       sscanf(buffer,"%d", skater[i].score[k][j]); 
      } 
     i++;   
    } 

    fclose(fpIn); 
    return i; 
} 

嗨,當我試圖調試代碼就說明我是緩衝溢出錯誤,我該如何解決這個問題?這是我第一次遇到這個錯誤,我也不確定我解決這個問題的方式是對的嗎?誰能告訴我一個辦法所以在這裏解決這個問題 是該問題的樣本數據:緩衝區超限問題進行調試時,一個C代碼

PLUSHENKO Evgeni 
1 13.0 0 2 1 1 1 0 1 0 1 1 1 1 
2 7.5 1 2 2 2 2 1 2 1 2 2 2 2 
3 6.0 2 1 1 1 1 0 0 2 1 2 1 2 
4 2.3 2 1 1 1 1 1 2 1 1 1 1 1 
5 3.4 2 2 2 2 1 2 3 3 2 3 2 1 
6 2.1 1 1 1 2 2 0 0 0 1 2 1 1 
7 3.1 1 0 2 2 1 1 1 2 2 2 2 1 
8 3.5 1 1 2 2 1 1 1 1 2 2 1 1 

有此一個 感謝身邊的數據3個街區幫助

+4

看起來像'sscanf(buffer,「%d」,skater [i] .score [k] [j]);'應該是'sscanf(buffer,「%d」,&skater [i] .score [k ] [j]);'(你錯過了一個'&')。 – DCoder 2012-03-18 06:59:28

+0

我不確定程序的功能。但正如@DCoder所說,當你添加缺失和缺失時,程序正常運行 – 2012-03-18 07:08:39

回答

2

您在定義int score[12][MAX_BASE];該結構SKATER。但你SCANF這樣的:

  for(j = 0; j < 12; j++) 
     { 
      sscanf(buffer,"%d", skater[i].score[k][j]); 
     } 

該指數error.You應更改爲sscanf(buffer,"%d", &skater[i].score[j][k]);,不要錯過&

sscanf(buffer,"%d", &skater[i].elements, skater[i].baseval);變化sscanf(buffer,"%d %f", &skater[i].elements, skater[i].baseval);

我認爲你需要閱讀this。需要通過點sscanf

祝您好運!