我已经仔细研究了这个至少一个小时,我仍然无法找出问题所在.
#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;
}
Run Code Online (Sandbox Code Playgroud)
会发生什么,我去输入"Name"字符串,然后当我输入并输入整数时程序崩溃.到底是怎么回事?
Ale*_*x B 12
scanf("%s", ...)
Run Code Online (Sandbox Code Playgroud)
这需要一个缓冲(scanf需要写入到它),你给它一个未初始化的指针,可能指向任何地方.
考虑执行以下操作之一:
Name改为制作一个字符缓冲区:
typedef struct
{
int Level;
char Name[100];
} Base;
Run Code Online (Sandbox Code Playgroud)从堆初始化它:
baseStruct.Name = malloc(100); /* do not forget to cleanup with `free()` */
Run Code Online (Sandbox Code Playgroud)您还应该在scanf格式字符串中指定最大字符串长度以防止溢出:
/* assume 'Name' is a buffer 100 characters long */
scanf("%99s", baseStruct.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4784 次 |
| 最近记录: |