Я должен написать функцию на C, которая принимает в качестве входных данных указатель файла и возвращает структуру, подобную этой:
typedef struct product{
char * code_product;
char * name;
char * code_piece;
only_time_t enter;
only_time_t exit;
}product_t;
Эта структура использует другую структуру, подобную этой:
typedef struct only_time{
int hour;
int minute;
int second;
}only_time_t;
Для чтения из файла я использую функцию getline()
, а функцию strtok()
- для создания токенов.Вот функция, которую я использую для чтения из файла:
product_t * read_line(FILE * fp){
char * line = NULL;
size_t len = 0;
product_t * temp;
int i = 0;
temp = (product_t *) malloc(sizeof(product_t));
temp->code_product = (char *) malloc(sizeof(char) * 4);
temp->name = (char *) malloc(sizeof(char) * 60);
temp->code_piece = (char *) malloc(sizeof(char) * 4);
//read a line from the file
getline(&line, &len, fp);
//handle line info info
char *tokens[80];
tokens[0] = strtok(line," ,.");
while (tokens[i] != NULL) {
i++;
tokens[i] = strtok(NULL," ,.");
}
temp->code_product = tokens[0];
temp->name = tokens[1];
temp->code_piece = tokens[2];
temp->enter = timestring_to_time(tokens[3]);
temp->exit = timestring_to_time(tokens[4]);
//cleanup
if (line)
free(line);
return(temp);
}
Чтобы увидеть, что прочитала программа, я использую простую функцию, которая печатает структуру:
void print_product(product_t * product){
printf("product_t code_product: %s \n", product->code_product);
printf("product_t name: %s \n", product->name);
printf("product_t code_piece: %s \n", product->code_piece);
printf("product_t enter: %d:%d:%d \n", product->enter.hour,product->enter.minute,product->enter.second);
printf("product_t exit: %d:%d:%d \n", product->exit.hour,product->exit.minute,product->exit.second);
}
Iнастроить тестовый сценарий, который имеет следующую строку в текстовом файле (он называется test.txt и помещается в ту же папку, что и исполняемый файл):
H235 Sportello_dx N246 15:20:43 15:27:55
Однако вывод программы такой:
product_t code_product: ��)��
product_t name:
product_t code_piece: N246
product_t enter: 15:20:43
product_t exit: 15:27:55
. Вот пастбина со всем кодом, готовым к запуску: https://pastebin.com/9rz0vM5G
почемуЯ получаю этот странный вывод для первых 2 строк, но остальные работают?