【发布时间】:2020-04-04 21:37:56
【问题描述】:
我正在动态分配我的程序所需的内存量。在我遇到这个问题之前它工作正常。这是当我输入将在我的一个项目内的内容时,如果我输入超过 10 个数字,例如(12345678912),它会发回给我,一个完全不同的数字。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct cadastro
{
char email[50];
char nome[20];
int idade;
int telefone;
};
int main()
{
int quantidade_cadastros;
int decisao = 1;
printf("\nQuantos cadastros deseja realizar?\n");
printf("Quantidade: ");
scanf("%d", &quantidade_cadastros);
getchar();
//Definindo a quantidade de cadastros que podem ser realizados no struct e o nome que sera usado para chamar o struct
struct cadastro *cad;
cad = NULL;
cad = malloc(quantidade_cadastros * sizeof(struct cadastro));
for (int i = 0; i < quantidade_cadastros; i++)
{
printf("\nDigite o NOME da pessoa que sera inserida no indice %d: ", i);
fgets(cad[i].nome, 20, stdin);
printf("Digite o EMAIL da pessoa que sera inserida no indice %d: ", i);
fgets(cad[i].email, 50, stdin);
printf("Digite a IDADE da pessoa que sera inserida no indice %d: ", i);
scanf("%d", &cad[i].idade);
getchar();
printf("Digite o TELEFONE da pessoa que sera inserida no indice %d: ", i);
scanf("%d", &cad[i].telefone);
getchar();
}
for (int i = 0; i < quantidade_cadastros; i++)
{
printf("\nNOME: %s", cad[i].nome);
printf("EMAIL: %s", cad[i].email);
printf("IDADE: %d", cad[i].idade);
printf("\nTELEFONE: %d", cad[i].telefone);
printf("\n");
}
printf("\n");
free(cad);
}
这是我输入的内容:
Quantos cadastros deseja realizar?
Quantidade: 2
Digite o NOME da pessoa que sera inserida no indice 0: Test1
Digite o EMAIL da pessoa que sera inserida no indice 0: Email1
Digite a IDADE da pessoa que sera inserida no indice 0: 19
Digite o TELEFONE da pessoa que sera inserida no indice 0: 1234567891
Digite o NOME da pessoa que sera inserida no indice 1: Test2
Digite o EMAIL da pessoa que sera inserida no indice 1: Email2
Digite a IDADE da pessoa que sera inserida no indice 1: 18
Digite o TELEFONE da pessoa que sera inserida no indice 1: 12345678912
NOME: Test1
EMAIL: Email1
IDADE: 19
TELEFONE: 1234567891
NOME: Test2
EMAIL: Email2
IDADE: 18
TELEFONE: -539222976
【问题讨论】:
-
一个 int 可以在你的系统上保存的最大数是多少?
-
@Eraklon 不,因为我不想生成数字,我想知道为什么它输出的数字与我输入的数字完全不同
-
点击错误。但这仍然是重复的。阅读有关整数溢出的信息。
-
@Eraklon 我搜索了有关 int 的信息,发现它最多可以存储“最高有符号值将是 2^31,即 2,147,483,648。”这能回答我自己的问题吗?
-
12,345,678,912 > 2,147,483,648 ---> 整数溢出,如果你搜索这个词你就会知道哪里错了。
标签: c struct dynamic-memory-allocation