Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尝试使用%n写入缓冲区会导致segfault,但使用%p读取不会';T_C_Segmentation Fault - Fatal编程技术网

C 尝试使用%n写入缓冲区会导致segfault,但使用%p读取不会';T

C 尝试使用%n写入缓冲区会导致segfault,但使用%p读取不会';T,c,segmentation-fault,C,Segmentation Fault,我有可利用的c代码,它接受用户输入。我可以使用%10$p打印堆栈的内容,它打印出存储在堆栈上的第10个值。但是,当我尝试运行相同的程序,但使用%10$n时,它会出错。这没有道理。SEGFULTS表示我试图访问不属于我的内存。然而,这段记忆确实“属于我”,因为我可以把它打印出来。为什么会发生这种情况 不幸的是,我不能为它的邮政编码,因为它是一个任务。因此,我必须让这个问题保持抽象。%10$n意味着将打印到地址的字符数写入堆栈上的第10个元素,而不是堆栈中的实际第10个元素。这意味着,如果第10个元

我有可利用的
c
代码,它接受用户输入。我可以使用
%10$p
打印堆栈的内容,它打印出存储在堆栈上的第10个值。但是,当我尝试运行相同的程序,但使用
%10$n
时,它会出错。这没有道理。SEGFULTS表示我试图访问不属于我的内存。然而,这段记忆确实“属于我”,因为我可以把它打印出来。为什么会发生这种情况


不幸的是,我不能为它的邮政编码,因为它是一个任务。因此,我必须让这个问题保持抽象。

%10$n
意味着将打印到地址的字符数写入堆栈上的第10个元素,而不是堆栈中的实际第10个元素。这意味着,如果第10个元素没有指向有效的、可写的内存,而它很可能没有指向,那么您将在尝试写入时进行segfault