scanf和p转换说明符

xde*_*000 3 c format-specifiers c11

在C11规范中说参数类型%p必须是void **在scanf()函数的情况下,但我无法想象如何输入一个地址并将其存储到一个void **.事实上,如果我试图做:

void **p;
scanf("%p", p);
Run Code Online (Sandbox Code Playgroud)

我遇到了分段错误.

PS C11规格:

相应的参数应该是指向void的指针

use*_*751 6

void **p;
scanf("%p", p);
Run Code Online (Sandbox Code Playgroud)

因为同样的原因不起作用

int *i;
scanf("%i", i);
Run Code Online (Sandbox Code Playgroud)

不起作用 - 你正在写一个未初始化的指针(或告诉scanf写一个,至少).

这有效:

int i;
scanf("%i", &i);
Run Code Online (Sandbox Code Playgroud)

这样做:

void *p;
scanf("%p", &p);
Run Code Online (Sandbox Code Playgroud)