gpt4 book ai didi

c - 如何像 gets_s() 一样调用无效的处理函数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:31 24 4
gpt4 key购买 nike

如果用户输入超过 4 个字符,我使用以下代码调用无效参数处理程序。实际上是调用处理程序的 gets_s() 函数。

...
char arr[5];
_invalid_parameter_handler newHandler;
newHandler = myInvalidParameterHandler;
_set_invalid_parameter_handler(newHandler);

gets_s(arr,4);
...
}
void myInvalidParameterHandler(const wchar_t* expression,const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
...
}

现在,我的问题是 gets_s() 如何在内部调用/调用处理程序?我问这个是因为我想在我的程序中做一些类似的事情。例如。假设我有一个函数声明为-

编辑:

如果在运行上述代码时用户输入超过 4 个字符,则调用处理程序。如果我注释掉无效的处理程序相关代码,那么我的程序将崩溃。我想要实现的也是如此。如果有人使用我的函数,他应该得到与我使用 gets_s 时相同的行为。请不要暗示这是好是坏。我只是想学习它。gets_s 不知道我要设置哪个处理函数。类似地我的函数不知道用户将设置哪个无效处理程序 func。我认为可能有一些类型为 _invalid_parameter_handler 的 C 运行时全局变量,'_set_invalid_parameter_handler()' func 设置了 gets_s 使用。

最佳答案

在我看来 13 是一样的,是的,你可以那样做。让您的所有函数都调用某个全局结构中的函数指针,然后就可以了。

  • 设置一个包含函数指针和一些簿记数据的全局对象
  • 当函数检测到错误时,它可以调用处理程序

但是不要这样做。返回错误状态比在“感觉”出问题时自动调用函数要好得多。然后您可以检查返回状态并对其采取行动,而不是由某些自动处理程序接管。

编辑

根据您的评论,我相信您不知道 function pointers .

/* here is the handling function */
void handler(char *msg)
{
fprintf(stderr, "%s\n", msg);
}

void (*err_handler)

void some_function_like_gets(void *arg)
{
if (NULL == arg) {
(*err_handler)("Oh noes! You passed a NULL pointer :(");
return;
}

}


int main()
{
/* ... */

/* setting up handler */
err_handler = handler;

/* calling function */
some_function_like_gets(NULL);

/* ... */
}

编辑 2

可悲的是,即使the MSDN page,你还是对此投了反对票说:

[in] pNew The function pointer to the new invalid parameter handler.

关于c - 如何像 gets_s() 一样调用无效的处理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com