作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我考虑了至少一个小时,但仍然找不到问题所在。
#include <stdio.h>
typedef struct
{
int Level;
char* Name;
} Base;
Base baseStruct;
int main(int argc, char *argv[])
{
scanf("%s", baseStruct.Name);
scanf("%d", &baseStruct.Level);
printf("%s :: Level %d\n", baseStruct.Name, baseStruct.Level);
return 0;
}
发生的事情是,我去输入“名称”字符串,然后当我键入并输入整数时,程序崩溃了。这是怎么回事?
最佳答案
scanf("%s", ...)
这需要一个缓冲区(scanf
需要写入 它)并且你给它一个未初始化的指针,它可以指向任何地方。
考虑执行以下操作之一:
改为将 Name
设为字符缓冲区:
typedef struct
{
int Level;
char Name[100];
} Base;
从堆中初始化它:
baseStruct.Name = malloc(100); /* do not forget to cleanup with `free()` */
您还应该在 scanf
格式字符串中指定最大字符串长度以防止溢出:
/* assume 'Name' is a buffer 100 characters long */
scanf("%99s", baseStruct.Name);
关于c - 为什么这个 C 程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877665/
我是一名优秀的程序员,十分优秀!