printf在strcpy中的seg-fault之后执行?

时间:2018-03-29 09:09:02

标签: c printf strcpy

我有以下代码:

  char buf[10];
  strcpy(buf, "This is a string longer than way longer than ten characters.");
  printf("%s\n", buf);  

我知道第二行将导致段错误,因为我写了超过数组buf的长度,因为我得到以下内容:

  ./a.out
  This is a string longer than way longer than ten characters.
  Segmentation fault (core dumped)

为什么printf命令被执行,因为strcpy会产生段错误?我在没有print语句的情况下运行,我只得到一个段错误。

1 个答案:

答案 0 :(得分:0)

在C中编码,你可以追求你的数组大小。您将使用不专用于您的变量的内存。您可以毫无问题地使用它,但请记住,这个“免费”内存可以分配给您可能使用/声明的任何变量!这就是为什么你的字符串中唯一的“受保护”部分将是10个第一个字符,因为你声明了它