繁体   English   中英

访问结构数组中的数据

[英]Acces data in a structure array

我不明白我必须如何使用指向结构的指针。 我正在尝试一个非常简单的示例,但是没有用。

typedef struct
{
char nombre [100], domicilio [200];
int codigo_postal, nro_documento;
unsigned char edad_sexo;
}
t_persona;

int main()
{
int edad;
char sexo;
t_persona* dati=malloc(sizeof(t_persona));
scanf("%d",(*dati).codigo_postal);
    return 0;
}

为什么我的程序崩溃? 我应该如何将int值放入结构中?

您的程序崩溃是因为您要将未初始化的int传递给scanf() ,而期望该指针指向int 我怀疑您在不启用警告的情况下进行编译,因为您正在学习,因此我强烈建议启用编译器警告。

要使用scanf() ,还需要检查它的返回值,如下所示

if (scanf("%d", &dati->codigo_postal) != 1)
    do_something_because_codigo_postal_is_not_initialized();

您必须传递指向本地变量的指针,以使scanf()能够在其中存储值,如果仅传递变量,则其值将被视为scanf()将尝试存储结果的地址,从而导致未定义的行为,并且变量从未被初始化,这是导致未定义的行为的另一个原因。

另外,不要像这样使用malloc()始终检查其返回值。 我会这样重写你的所有代码

typedef struct
{
    char nombre[100];
    char domicilio[200];
    int codigo_postal;
    int nro_documento;
    unsigned char edad_sexo;
} t_persona;

int main()
{
    t_persona *dati = malloc(sizeof(*dati)); // Use sizeof(*dati) which is
    if (dati == NULL)                        // far more maintainable.
        return -1; // `malloc()' failed
    if (scanf("%d", &dati->codigo_postal) != 1)
        return -1; // input error
    fprintf(stderr, "%d\n", dati->codigo_postal);
    free(dati);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM