2

我有一个正在编写的程序,我需要从平面文件中获取一行。然后我 sscanf 将数据放入结构中。这给了我非常意想不到的结果。首先,这是一个类似于我想做的工作示例。我有一个文件 department.in,如下所示:

0 something
1 else
2 more

这是一个示例程序,它运行并给出了我期望的结果:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

    FILE *in;
    in = fopen("department.in", "r");

    char * buffer = malloc(256 * sizeof(char));
    while((fgets(buffer, 256, in)) != NULL){

            int index;
            char* name;
            sscanf(buffer, "%d %s", &index, name);

            printf("\n\nIndex: %d, Name: %s.\n\n", index, name);
    }

    free(buffer);

    return 0;
}

正如预期的那样,结果是:

Index: 0, Name: something.

Index: 1, Name: else.

Index: 2, Name: more.

但是,当我添加一个结构时,它编译得很好:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int index;
    char* name;
}test;

int main(void)
{

    FILE *in;
    in = fopen("department.in", "r");

    char * buffer = malloc(256 * sizeof(char));
    while((fgets(buffer, 256, in)) != NULL){

            test *mytest = malloc(sizeof(test));

            sscanf(buffer, "%d %s", &mytest->index, mytest->name);

            printf("\n\nIndex: %d, Name: %s.\n\n", mytest->index, mytest->name);
            free(mytest);
    }
    free(buffer);
    return 0;
}

结果不是我所期望的:

Index: 0, Name: (null).

Index: 1, Name: (null).

Index: 2, Name: (null).

显然,我的 char 做错了什么,但我终生无法弄清楚是什么。当我改变某些东西时,它甚至会出现故障。任何帮助将不胜感激!

PS这不是家庭作业。我刚刚为我的实际代码制作了一个更加简化的示例,以便在此处阅读和编译以及学习我需要的这个概念。再次感谢!

4

1 回答 1

2

将存储分配给mytest->name。输出告诉您指针为 NULL。

mytest->name = malloc(256); /* sizeof(char) is always 1, by definition */

或者您可以将指针替换为数组。

typedef struct{
    int index;
    char name[256];
}test;

顺便说一句,做一个简化的例子做得很好。

于 2013-04-26T00:39:47.590 回答