为什么我的程序崩溃了?
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 动态分配内存。
我是 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 动态分配内存。