Пока на самом деле есть только один пробел между каждой из этих структур ... Я мог бы сделать что-то вроде этого. Это довольно уродливо, но выполнит работу, если вы точно знаете свой максимальный размер строки и структура файла не будет иметь никаких ошибок (лишних пустых строк и т. Д.). В противном случае вам лучше будет написать гораздо лучший код, который обрабатывает и разбивает / возвращает в случае исключений.
Как отмечается в комментариях, вы должны убедиться, что в конце вашего массива char будет учитываться '\ n'. Вот некоторые модификации того, что я первоначально отправил. Обратите внимание, что это может нарушиться, если окончание строк основано на Windows (я полагаю). Я добавил небольшой хак, чтобы попытаться исправить проблему с массивом и символами \ n.
struct input_par
{
int key_node;
char src_ip[21];
char dst_ip[21];
int src_port;
int dst_port;
};
FILE* file = fopen("inputfile.txt", "r");
char linebuffer[21]; //a little extra room here than needed, presumably...
struct input_par ip;
int i = 0, l = 0;
while(fgets(linebuffer, 20, file))
{
ip.key_node = atoi(linebuffer);
fgets(linebuffer, 20, file);
strcpy(ip.src_ip, linebuffer);
l = strlen(linebuffer);
for(i = 0; i < l; ++i){
if(linebuffer[i] == '\n'){
linebuffer[i] = '\0'
break;
}
}
fgets(linebuffer, 20, file);
strcpy(ip.dest_ip, linebuffer);
l = strlen(linebuffer);
for(i = 0; i < l; ++i){
if(linebuffer[i] == '\n'){
linebuffer[i] = '\0'
break;
}
}
fgets(linebuffer, 20, file);
ip.src_port = atoi(linebuffer);
fgets(linebuffer, 20, file);
ip.dst_port = atoi(linebuffer);
fgets(linebuffer, 20, file); //get the empty line
}