[英]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.