分段错误 - C.

ceo*_*eod 10 c segmentation-fault

为什么以下代码返回分段错误?当我注释掉第7行时,seg错误消失了.

int main(void){
      char *s;
      int ln;
      puts("Enter String");
      // scanf("%s", s);
      gets(s);
      ln = strlen(s); // remove this line to end seg fault
      char *dyn_s = (char*) malloc (strlen(s)+1); //strlen(s) is used here as well but doesn't change outcome
      dyn_s = s;
      dyn_s[strlen(s)] = '\0';
      puts(dyn_s);
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

干杯!

Oli*_*rth 18

s是一个未初始化的指针; 你正在写入内存中的随机位置.这将调用未定义的行为.

你需要分配一些内存s.另外,永远不要使用gets ; 没有办法防止它溢出你分配的内存.请fgets改用.