2011-03-24 95 views
0

啊,谢谢!说得通。刚刚作出MAX_COMMAND_LENGTH + 1的命令。fscanf内循环

我想使用fscanf在一个循环中读取同一个文件2次不同的时间,但我得到一个seg故障。这个想法是,文件将被格式化,以便它在每行的开始处有一个命令,随后是该命令的参数。

char* command; //Changed to char command[MAX_COMMAND_LENGTH + 1] 

    while(fscanf(file, "%s", command) == 1) 
    { 
    if (strcmp("CMD1", command) == 0) 
    {  
     int index, exp, coeff; 
     fscanf(file, "%d %d %d", &index, &exp, &coeff); 
    } 
    else if (strcmp("CMD2", command) == 0) 
    { 
     int num; 
     fscanf(file, "%d", &num); 
    } 
} 
+0

为什么你通过文件读两次? – 2011-03-24 01:36:56

回答

3

您需要为command分配内存。例如:

command = (char *)malloc(1024 * sizeof(char)); 

将为1024个字符分配足够的内存。

当你完成它时,请记住free(command)

0

您需要分配一些存储并将其存储在“命令”中。您正在要求fscanf通过未初始化的指针进行写入。

0

现在你只需要一个指针。您需要分配一些空间来容纳您阅读的字符串:

char command[256]; 

if (fscanf(file "%256s", command)==1) 
    // ... 
0

您应该分配一个缓冲区来读取该命令。目前command未初始化,它指向总和无效地址。所以要么你“malloc()”命令的内存或作为数组声明命令(char command[whateversizeyouneed]