为什么我的程序崩溃了?

时间:2015-01-11 16:07:22

标签: c crash

我对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");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

此行崩溃:scanf("%s", name);,因为name未初始化,因此您无法将其传递给scanf

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

答案 1 :(得分:0)

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

要解决此问题,请更改

char *name;

char name[100];

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