поэтому я пытался заставить эту часть программы прочитать конкретный файл, который содержит имена и цифры в этом формате
номер имени
и т. Д.,и сохраните их в списке структуры
void read_data(char *filename, list *mylist) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("Can't open file\n");
exit (1);
}
char pass[100];
int order;
char line[1000];
while (fgets(line, 1000, file) != NULL) {
list_element *element = malloc(sizeof(list_element));
sscanf(line, "%s %d", pass, &order);
sprintf(element->password, "%s", pass);
element->count = order;
element->next = NULL;
insert_front(element, mylist);
}
fclose(file);
}
sprintf
продолжает сбой программы с ошибкой сегментации.Я пробовал snprintf
, и у меня все та же проблема.Я не могу использовать буфер, поскольку в этой конкретной задаче мне не разрешено использовать <string.h>
, поэтому strcpy
не является опцией
Сама структура:
struct list_element {
char *password;
int count;
list_element* next;
};
Valgrind показывает:
==25999== Conditional jump or move depends on uninitialised value(s)
==25999== at 0x4ECC374: _IO_str_init_static_internal (strops.c:51)
==25999== by 0x4EBD6C2: vsprintf (iovsprintf.c:41)
==25999== by 0x4EA1093: sprintf (sprintf.c:32)
==25999== by 0x4008E7: read_data
==25999== by 0x400B80: main
==25999== Uninitialised value was created by a heap allocation
==25999== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==25999== by 0x400898: read_data
==25999== by 0x400B80: main
Любые советы о том, где моя ошибка будет принята:)