下面我已经将我的完整代码包含在我正在开发的程序中。它应该允许用户在程序中输入输入,直到他们在名字输入中输入"."。在通过一次输入后,我遇到了分段错误,一旦我第二次将输入输入到结构中,它就会出错。我还应该动态分配结构,以便用户可以根据需要多次输入输入,但为了测试,我将其设置为 10 以查看程序是否可以工作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int recordCount;
char *firstName;
char *lastName;
char *id;
char *email;
};
int main()
{
struct student *aPtr;
aPtr = malloc(sizeof(struct student)*10);
//aPtr = (struct student*) malloc(10 * sizeof(struct student));
aPtr->firstName = malloc(sizeof(char)*50);
aPtr->lastName = malloc(sizeof(char)*50);
aPtr->id = malloc(sizeof(char)*10);
aPtr->email = malloc(sizeof(char)*50);
int i;
for (i = 0; i < 10; ++i) {
printf("First Name: ");
scanf("%s", (aPtr + i)->firstName);
if ((aPtr + i)->firstName[0] == '.') {
break;
}
printf("Last Name: ");
scanf("%s", (aPtr + i)->lastName);
printf("ID#: ");
scanf("%s", (aPtr + i)->id);
printf("Email: ");
scanf("%s", (aPtr + i)->email);
printf("n");
aPtr->recordCount++;
}
for (i = 0; i < aPtr->recordCount; ++i) {
printf("%s, %s, %s, %s",(aPtr + i)->id, (aPtr + i)->firstName, (aPtr + i)->lastName, (aPtr + i)->email);
printf("n");
}
return 0;
}
使用 gdb 调试器调试你的代码,你可以自己找到它。如果您不熟悉调试,请点击此链接以了解更多信息。https://www.tutorialspoint.com/gnu_debugger/index.htm
在此代码中,我认为您在以下行中错误地使用了指针:
aPtr + i)->firstName[0] == '.'
纠正它,查找指针的正确使用。
注意:你可以通过使用char firstname[50],lastname[50]来使代码更容易,.....等。使用它,您可以非常轻松地摆脱分段错误。
希望对您有所帮助!谢谢。