C语言杂记 0x0A

核心已转储

今天写一个字符串反转练练手,涉及到手动输入字符串时出现了一些问题

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);

记得释放内存哦!

你可能感兴趣的:(C语言杂记)