核心已转储
今天写一个字符串反转练练手,涉及到手动输入字符串时出现了一些问题
char s[];
scanf("%s",s);
采用字符数组的方式输入的时候完全没有问题,但是采用下面的方式的时候就会报错
核心以转储
char *s;
scanf("%s",s);
什么是核心已转储呢?
通俗的理解就是访问了不能访问的内容,如下:
- 访问不存在的内存地址
- 访问系统保护的内存地址
- 访问只读的内存地址
- 访问废弃的空指针
- 堆栈溢出
- 内存越界
- …
所以我们的char* s不可以用scanf手动输入字符串的原因就是因为char *s仅仅是一个指针,并没有为其分配空间,所以我们在使用scanf访问的时候就会发生访问不存在的内存的问题。
改进:
char *s = (char*)malloc(sizeof(char*));
scanf("%s",s);
...
free(s);
记得释放内存哦!