Я использую vc2010, и я пытаюсь прочитать содержимое файла в структуру следующим образом, и это дает мне ошибку во время выполнения.
char buf[100];
char *token = NULL;
while( fgets (buf , 100 , rd) != NULL )
{
token = strtok( buf,", ");
test_st.fp.chunk_offset = atol(token);
printf("\n %llu ", test_st.fp.chunk_offset);
//OPTION 1: if i do this there will be no runtime error but the same
// value as the first token will be assigned to chunk_length
token = strtok(buf, ",");
//OPTION 2: this line gives error in the second while loop iteration
token=strtok(NULL,",");
test_st.fp.chunk_length = atol(token);
printf("%llu ", test_st.fp.chunk_length);
token = strtok(NULL, " ");
....
}
Моя другая проблема заключается в том, как я могу использовать strtok () или что угодно, если оно есть, для назначения очень длинной символьной строки (например, после второй запятой в следующем содержимом файла) в элемент данных структуры (в этот случай в fp.fing_print )?
Вот первая часть файла, который я пытаюсь прочитать
0,4096,2ed692b40e335f7c20b71c5ed0486634
4096,3028,da40bf20c8ff189087b8bd7e8580118a
7124,2177,e6dfaee81e96095d302c82f9fd73dc55
9301,1128,76201eadff3c89a381a314ed311f75ff
определение структуры, в которое я пытаюсь это прочитать:
typedef struct fpinfo
{
unsigned long chunk_offset;
unsigned long chunk_length;
unsigned char fing_print[32];
}fpinfo;
typedef struct Hash_Entry {
struct Hash_Entry *next; /* Link entries within same bucket. */
unsigned namehash; /* hash value of key */
struct fpinfo fp;
} Hash_Entry;
EDIT:
Да, вы правы, я должен использовать второй вариант.
Я НАШЕЛ ПРОБЛЕМУ С ЭТИМ. Файл имеет пустые строки между каждой строкой и выдает сообщение об ошибке, когда попадает в эти пустые строки.
НО Я УСТРАНЕН в другой проблеме, где я должен прочитать последнюю часть каждой строки в элемент массива ( fp.fing_print ) структуры.
Спасибо всем за помощь !!!
EDIT:
Предполагается, что массив fing_print [32] содержит 32 символа, которые являются результатами хэш-функции md5. Я не уверен, должен ли я сделать это нулевой завершенной строкой или нет. если бы вы, ребята, могли бы дать мне совет об этом, я буду более чем благодарен.