我正在编写一个程序,该程序应该执行多项操作,包括提示用户输入已完成的输入文件的名称,但是我在实现一个麻烦的过程,该程序处理文件中的每一行,并将其存储为结构数据结构,最后使用malloc,calloc命令,它将所有有效记录存储在要验证的内存中。因此,有关如何执行此操作的任何帮助都将有所帮助。
#include <stdio.h> //library including standard input and output functions
#include <stdlib.h> //library including exit and system functions used below
#include <string.h> //library including string functions used
struct packet{
int source;
int destination;
int type; // Varibles for the structure
int port;
char data[50];
char * filename;
};
int main ()
{
printf("**************Details*******************************\n");
printf("*****Student name: ***********************\n");
printf("*****Course name: *******\n");
printf("*****Student ID: ************************ \n");
printf("\n");
// The program must prompt for the name of the input file. If it doesn't exist the program should stop with an error message
FILE *DataFile;
char filename[10] = { '\0' } ;
char DataLine[70];
printf("Enter the filename you wish to open\n");
scanf("%s", &filename);
if (( DataFile = fopen(filename, "r")) == NULL)
{
printf ("*****file could not be opened. : %s\n", filename);
exit(1);
}
// Read the data from this file
char *fgets(DataLine, 70, (FILE) *DataFile);
system("pause");
return 0;
}
这是程序应从中获取数据的文本文件
0001:0002:0003:0021:CLS
0001:0010:0003:0021:CLS
0001:0002:0002:0080:<HTML>
0005:0002:0002:8080:<BR>
0005:0012:0002:8080:<BR>
0001:0002:0002:0080:<BODY>
0005:0002:0002:8080:<B>HELLO</B><BR>
0002:0004:0002:0090:100000000000000000022
0001:0002:0003:0021:DEL
0002:0004:0002:0010:100000000000000000023
文件中的每个冒号都表明它应该属于数据包结构的哪一部分,即,第一个4个数字集是“源”,然后是“目的地”,依此类推。
最佳答案
一种方法是:
使用fgets
逐行读取文件。
对于每一行,使用strtok
标记字符串。
对于前四个标记中的每个标记,使用strtol
将其转换为整数。
关于c - 处理要存储为结构的每一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25563879/