【发布时间】:2017-04-08 03:32:56
【问题描述】:
我正在尝试在 C 中制作帐户系统。 我正在尝试通过这种方式对结构数组进行输入。
struct account { // Account Structure
int id;
int money;
char *name[30];
};
account * accountarray[50];
int number;
void MakeAccount() {
int id;
int input_money;
char name[50];
printf("--Make Account--\n");
printf("Input ID : ");
scanf("%d", &id);
printf("Insert Money : ");
scanf("%d", &input_money);
printf("Your Name? : ");
scanf("%s", name);
accountarray[number++] = NULL; // I think there's a problem in this side
accountarray[number++]->id = id;
accountarray[number++]->money = input_money;
*accountarray[number++]->name = name;
}
当我输入值时它会停止...我认为下面的 4 个代码有问题.. 有没有好办法让它变得更好?
【问题讨论】:
-
问题不清楚
-
更多地学习指针和数组。您有一个 struct
account类型,其中包含一个包含 30 个指向 char 的指针(不是 char 数组,是一个指向 char 的数组)作为成员的数组,以及一个包含 50 个指向account的指针的全局数组.在所有这一切中,只有一件事实际上有任何这些指针指向,它是一个临时的 (name)。您在每个字段分配之间重复增加number看起来也非常错误。 -
@WhozCraig 好的,谢谢。我想我在本节中不需要指针。解决了放置值并检查它是好的。看到其他人为此使用了指针,尝试了这种方式并没有用。我想我真的需要学习更多的指针lol
-
确实,WhozCraig 是对的。
accountarray[number++] = NULL;后跟accountarray[number++]->id = id;... 这个错误(空指针取消引用)应该很明显如果您正在阅读一本书。你在看书吗? -
你不能通过无指导的反复试验安全地学习 C;你需要一个指南(例如一本书),或者你冒着依赖诸如此类的不可移植的未定义行为的风险。未定义行为的问题是它并不总是保证会产生崩溃。事实上,在这种情况下你很幸运,因为未定义行为的定义意味着没有保证。许多与未定义行为有关的问题非常难以调试,例如竞态条件、缓冲区溢出、序列点滥用......这些也可能导致安全问题。 停止猜测,开始阅读!