c - 用户输入后的分段错误



下面我已经将我的完整代码包含在我正在开发的程序中。它应该允许用户在程序中输入输入,直到他们在名字输入中输入"."。在通过一次输入后,我遇到了分段错误,一旦我第二次将输入输入到结构中,它就会出错。我还应该动态分配结构,以便用户可以根据需要多次输入输入,但为了测试,我将其设置为 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]来使代码更容易,.....等。使用它,您可以非常轻松地摆脱分段错误。

希望对您有所帮助!谢谢。

相关内容

  • 没有找到相关文章

最新更新