小编Tom*_*ory的帖子

ISO C Void*和功能指针

在学习了一些教程并阅读有关函数指针的内容后,我了解到显然在ISO C中为函数指针指定了一个void指针是未定义的,有没有办法解决我在编译期间收到的警告(例如更好的编码方式)或我应该忽略它吗?

警告:

ISO C forbids assignment between function pointer and 'void *' [-pedantic]
Run Code Online (Sandbox Code Playgroud)

示例代码:

void *(*funcPtr)();
funcPtr = GetPointer();
Run Code Online (Sandbox Code Playgroud)

GetPointer是一个返回void指针EG的函数

void *GetPointer();
Run Code Online (Sandbox Code Playgroud)

c function-pointers void-pointers

16
推荐指数
3
解决办法
9688
查看次数

用C冲洗输入

我是一名软件工程专业的学生,​​我正在休假,为了在下学期学习更好,我一直在编写各种控制台应用程序来练习.但是我遇到了一个问题,我需要从用户那里得到整数输入.我一直在使用fgets来获取字符串stdin然后使用sscanf来获取整数(已经工作正常)但是如果用户输入的数量超过了我的缓冲区大小,则会在流中保留尾随字符(包括跳过我的下一个调用的换行符)fgets).我环顾四周,发现大多数人似乎都认为while(getchar() != '\n');这会导致我出现问题,因为如果没有换行字符,就会发生不必要的输入扫描.

例:

int ch;
char* buffer = (char*)malloc(BUFSIZ*sizeof(char));
while((ch = getchar()) != '\n' && ch != EOF);
fgets(buffer,BUFSIZ*sizeof(char),stdin);
Run Code Online (Sandbox Code Playgroud)

如果缓冲区不是太小而流中没有尾随字符,则会getchar()导致输入不必要.

输出:

A

A

You typed A

Intended Output:

A

You typed A
Run Code Online (Sandbox Code Playgroud)

我希望我说得够清楚,我感谢任何帮助.

c input flush getchar

2
推荐指数
1
解决办法
504
查看次数

标签 统计

c ×2

flush ×1

function-pointers ×1

getchar ×1

input ×1

void-pointers ×1