我想写一个小程序,当用户通过 argv 输入时,它会出现段错误。我是 C 的新手,但我认为以下代码可以完成这项工作:
int main(int argc, char *argv[])
{
int bufferSize;
char * buffer[100];
unsigned int i;
if (argc > 1) {
bufferSize = atoi(argv[1]);
for (i = 0; i < bufferSize; ++i)
*( buffer + i ) = i;
}
return 0;
}
我的想法是程序初始化(?)一个指向特定大小缓冲区的指针。如果用户然后输入一个大于缓冲区大小的数字,它将写入未初始化的内存,从而获得一个段。过错。这个推理是否正确?
附言。编译时,我得到一个赋值 make pointer from integer without a cast
警告,有人可以告诉我为什么会这样吗?谢谢
最佳答案
据我所知,故意出现段错误的最传统方法是写入 NULL
,例如像这样的东西:
*((char *) NULL) = 0;
您可以使用命令行参数作为简单的 bool 值来查看是否应该这样做。
请注意,写入 NULL
实际上并不能保证会导致崩溃,它只是未定义的行为,所以基本上任何事情都可能发生(包括导致 nasal demons )。
警告是因为您有一个指针数组,并尝试将整数分配给数组中的指针。
关于c - 故意通过argv获取segmentation fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745329/