- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如果用户输入超过 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 使用。
最佳答案
在我看来 1
和 3
是一样的,是的,你可以那样做。让您的所有函数都调用某个全局结构中的函数指针,然后就可以了。
但是不要这样做。返回错误状态比在“感觉”出问题时自动调用函数要好得多。然后您可以检查返回状态并对其采取行动,而不是由某些自动处理程序接管。
编辑
根据您的评论,我相信您不知道 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/
我有这段代码,应该要求用户输入一些信息: char * nome = malloc(256); char * cc = malloc(256); char * morada = malloc(256)
我的代码使用 gets_s()获取用户输入的字符串。如果用户输入的字符串长度大于 gets_s 中指定的长度,应用程序将中止。那么如何优雅地处理呢? 谢谢。 最佳答案 1) gets_s 不是标准函数
如果用户输入超过 4 个字符,我使用以下代码调用无效参数处理程序。实际上是调用处理程序的 gets_s() 函数。 ... char arr[5]; _invalid_paramete
我在 Ubuntu 4.6.1 和 SUSE 4.6.2 上通过以下命令使用 gcc gcc gets_s.c 我的源码是 // Read and Display Lines // gets_s.c
gets_s() 函数在我的编译器上不起作用。我在 GCC 中使用代码块。 这是错误: undefined reference to '_imp_gets_s. 谁能告诉我如何解决这个错误。 最佳答案
假设我想从stdin 中读取,并让用户输入包含空字符的字符串。这是否可以通过 fgets 或 gets_s 等字符串输入函数实现?或者我必须使用例如fgetc 还是 fread? 有人 here想这样
所以基本上我在学习 C,他们教我们使用 gets() 函数,我发现它已被删除,不能再使用了。所以我正在尝试学习使用替代方法 gets_s() 函数,但我似乎做不到。例如,下面的代码在尝试编译时给出了“
我正在尝试使用 while 循环将用户输入写入 txt 文件。 但由于某种我不知道的原因,while 循环不会通过单击“输入”而停止。当我单击“输入”时,我看到“while 循环已执行”,因此我知道
我知道 fgets() 是一个更常见和广泛使用的字符串输入选项,但 C11 已经存在 9 年了。为什么 gets_s() 仍然没有工作? 即使我添加了 -std=c11,它仍然不起作用,即使 gets
我知道 fgets() 是一个更常见和广泛使用的字符串输入选项,但 C11 已经存在 9 年了。为什么 gets_s() 仍然没有工作? 即使我添加了 -std=c11,它仍然不起作用,即使 gets
我的代码: #include "stdafx.h" #include #include #include #define NAME_LEN 30 #define LINE_LEN 80 stru
所以我已经尽可能彻底地研究了这个问题,但是我一直无法确定解决方案(对编程非常陌生)。 基本上我正在尝试读取 .txt 文件,但是当我要求用户使用 get_s 函数输入文件名时,我收到错误 C2660
我正在自学 C 语言的结构,但在编译这段代码时遇到了问题: #include #include struct Date { int Month; int Day; int
我是一名优秀的程序员,十分优秀!