我有以下代码:
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语句的情况下运行,我只得到一个段错误。
答案 0 :(得分:0)
在C中编码,你可以追求你的数组大小。您将使用不专用于您的变量的内存。您可以毫无问题地使用它,但请记住,这个“免费”内存可以分配给您可能使用/声明的任何变量!这就是为什么你的字符串中唯一的“受保护”部分将是10个第一个字符,因为你声明了它