为什么我收到此错误(指针错误)

时间:2012-12-07 18:53:59

标签: c pointers function-pointers getopt

我是StackOverflow的新手,我只是想知道为什么我的C代码给了我这个错误。我真的希望这个解决,如果有人能解释为什么会发生这种情况而不是给我答案,那将非常感激。

void scanningForWS(int argc, char **argv)
{

int number = 0;
int sflag = 0;
int opt = 0;
int *s = 0;
char *getopt = 0;
char *optarg = 0;

while ((opt = *getopt(argc, argv, "w:s")) != -1) //the *getopt gives me this error
//Error: Expression much have a pointer-to function

{
switch (opt)
{
case 's':
    sflag = 1;
    break;
case 'w':
    number = atoi(optarg);
    break;
default:
    break;
}
}

}

这是while语句,我评论了需要的地方。

发现了问题,但尚未解决。我发现我没有unistd.h而且我无法得到它。有谁知道我能在哪里得到它?

3 个答案:

答案 0 :(得分:1)

您正在声明一个与该函数同名的变量,我不能说您是否包含了正确的标题。

这不是函数声明FYI,该行声明指向char的指针并使用值0初始化它。当前代码唯一有意义的方法是getopt是否为函数指针,而不是函数指针。

您的代码应为:

#include <unistd.h>

void scanningForWS(int argc, char **argv)
{
    int number = 0;
    int sflag = 0;
    int opt = 0;
    int *s = 0;    
    /* char *getopt = 0; do not declare getopt as a variable, 
                         just include the header uninstd.h and use it */

    while ((opt = getopt(argc, argv, "w:s")) != -1)
        /* ... */
}

答案 1 :(得分:1)

删除char *getopt; getopt是来自unistd.h的函数,并且通过声明char指针你正在做一些非常奇怪的事情:)

答案 2 :(得分:0)

getopt返回int,而不是int *

从while循环中删除*

while ((opt = getopt(argc, argv, "w:s")) != -1) //the *getopt gives me this error

为:

while ((opt = getopt(argc, argv, "w:s")) != -1) //the *getopt gives me this error