2016-03-16 3 views
0

Я никогда следующим разобрать CSV-файл, и это работает прекрасно, пока я изменилСинтаксический CSV с с

(getfield(tmp, 12)); 

в

(getfield(tmp, ver)); 

ли проблема в объявлении функции?

вот код:

const char* getfield(char* line, int num) 
{ 
    const char* tok; 
    for (tok = strtok(line, ";"); 
      tok && *tok; 
      tok = strtok(NULL, ";\n")) 
    { 
     if (!--num) 
      return tok; 
    } 
    return NULL; 
} 
int main() { 
    double frame_index[40][300]; 
    int horz; 
    FILE* fp = fopen("output.txt", "r"); 
    char line[1024]; 

     for (int ver; ver<20;ver++) { 
      while (fgets(line, 1024, fp)) { 
       char* tmp = strdup(line); 
       frame_index[ver][horz] = atof(getfield(tmp, ver)); 
       // works if "ver" was explicitly defined 
       printf("AA %f\n", frame_index[ver][horz]); 
       free(tmp); 
       horz++;  
     } 
     rewind(fp); 
    } 
} 
+0

Пожалуйста показать [Minimal, полный и проверяемых пример] (HTTP://stackoverflow.com/help/mcve). –

+0

'getfield()' может возвращать 'NULL'. Необходимо проверить это, прежде чем вызывать 'atof()'. – chux

ответ

2

Вы никогда не инициализировать переменную ver. Например, вы можете захотеть изменить

for (int ver; ver<20;ver++) 

к

for (int ver=0; ver<20;ver++) 

Update То же самое с horz ..

+0

по-прежнему получает segfault :( –

+1

Ну, 'horz' не инициализирован ... –

+0

не должен быть инициализирован автоматически? –