为什么我的程序崩溃了?

Why is my program crashing?

我是 C 的新手。我正在尝试做一些东西,但我无法克服这个问题。

我从程序副本中删除了很多内容以缩小问题范围。 我想知道为什么它会不断崩溃,欢迎提供提示。 谢谢

#include<stdio.h>

main()
{
    char *name;
    printf("\nName your pet.\n");
    scanf("%s", name);

    int hunger = 5;
    int time = 0;
    int loop = 0;
    int day = 1;
    int happiness = 40;
    int health = 100;
    int tired = 0;
    int option;

    while(loop < 1){
    printf("\n\nDay %i\ntime = %i\n\n",day,time);
    printf("1 - check\n2 - interact\n3 - go out\n4 - inventory\n\n");
    scanf("\n%i",&option);
        if (option == 1) {
            if (tired >= 90){
                printf("\n %s is struggling to stay awake", name);
            }
            else if (tired >= 75){
                printf("\n %s looks really tired", name);
            }
            else if (tired >= 50){
                printf("\n %s is starting to seem a little sleepy", name);
            }
            else if ((tired <= 10)&&(hunger < 50)){
                printf("\n %s is full of energy", name);
            }




            time = time - 1;

        }




    time = time + 1;
    if (10<=time){
        day = day + 1;
        time = 0;
        tired = 0;
        printf("Goodnight!/n");
        }
    }
}

它在这一行崩溃:scanf("%s", name);,因为name没有初始化,所以你不能把它传递给scanf

初始化name 例如像这样:char *name = malloc(sizeof(char) * 20);,所以现在一个 20 个字符的字符串适合 name.

在您的代码中,name 是一个 char*,这意味着它是一个指向 char 的指针。由于您没有分配内存或为指针提供有效地址,它指向某个未知位置。写入此位置是引发崩溃的原因。

要修复它,要么改变

char *name;

char name[100];

或者使用 malloc 作为 suggested by @returntrue 动态分配内存。