C 任何类型的输入扫描仪
我正在尝试编写一个更简单的scanf版本。我希望基本上能够为指针分配在用户输入上扫描的任何内容,如下所示:C 任何类型的输入扫描仪,c,C,我正在尝试编写一个更简单的scanf版本。我希望基本上能够为指针分配在用户输入上扫描的任何内容,如下所示: int *p = (int) w_insc(); 下面是我的实现: void *w_insc() { void *temp = 0; scanf("???", &temp); return &temp; } 我不知道在scanf中如何分配format参数。我还认为返回即将销毁的变量的地址是不正确的,因此我考虑这样做: int *p = 0; p
int *p = (int) w_insc();
下面是我的实现:
void *w_insc()
{
void *temp = 0;
scanf("???", &temp);
return &temp;
}
我不知道在scanf中如何分配format参数。我还认为返回即将销毁的变量的地址是不正确的,因此我考虑这样做:
int *p = 0;
p = (int) w_insc((int) p);
有人能帮忙吗你说得对。您可以通过返回一个指向使用malloc分配的内存区域的指针(尽管调用方必须记住释放此内存),或者将一个指针作为w_insc
的参数,然后用返回的值填充指针来解决此问题
然而,在尝试实现w_insc
功能时存在更广泛的问题。w_insc
无法知道调用者的期望。仅仅因为调用者将w_insc
的返回值强制转换为int
,就不允许w_insc
知道它应该返回int
。C函数唯一可用的信息是它的一组参数,加上程序中的任何全局变量(全局变量通常是解决问题的错误方法)。请注意,C函数无法知道调用方将如何处理其返回值。因此,无法写入w_insc
以不获取任何参数并根据调用方进行的某些转换返回正确扫描的内容
您可以将一个参数添加到w_insc
,使声明成为
int w_insc(const char *format, ...)
这允许调用者传入一个格式字符串和一系列参数,详细说明他们期望从标准输入中得到什么。然而,在这个实现中,您刚刚用。。。另一个看起来很像scanf的函数
我的建议是:使用标准库函数,因为它们是标准化的,阅读您的代码的人会立即知道它的含义,而不必通读您所描述的w_insc
这样一个几乎微不足道的包装器的定义