C 为什么会出现此错误(指向错误的指针)

C 为什么会出现此错误(指向错误的指针),c,pointers,function-pointers,getopt,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(

我是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,我无法获得它。有人知道我在哪里可以得到它吗?

getopt返回一个
int
,而不是
int*

从while循环中删除
*

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


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

这不是函数声明仅供参考,该行声明一个指向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)
        /* ... */
}
#包括
无效扫描FORWS(整数argc,字符**argv)
{
整数=0;
int-sflag=0;
int opt=0;
int*s=0;
/*char*getopt=0;不要将getopt声明为变量,
只需包含标题uninstd.h并使用它*/
而((opt=getopt(argc,argv,“w:s”)!=-1)
/* ... */
}

删除
char*getopt

getopt
是一个来自
unistd.h
的函数,通过声明char指针,您正在做一些非常奇怪的事情:)

不,不幸的是,我仍然有相同的错误。没有任何变化:(@user1886339似乎您正在声明一个同名的指针
getopt
。要使用标准的getopt,只需包含
#include
。哦,孩子,一个又一个的问题。如果我把#include放进去,它会给我一个错误,说:无法打开源文件unistd.hOhh,那么您会建议我将变量声明更改为其他类型吗然后是她的getopt?或者你会建议更改while语句中的getopt吗?我对C相当陌生,我对这个错误/输入错误很困惑,我不确定我的VS副本是否有问题:(现在它告诉我getopt是未定义的。它只有在我注释掉声明后才变得未定义,如果我保留声明,我会得到指向我之前得到的错误的指针:/@user1886339:
getopt
是一个unix函数,它不存在于VS CRT中,也不是标准C。如果需要它,请看这里:@user1886339:没有任何错误关于你的VS副本。它告诉你它是未定义的,因为它确实是未定义的。C标准库对任何
getopt
函数一无所知。你自己也没有定义它。为什么你希望编译器神奇地知道
getopt
是什么?是的,我终于明白了。我没有unistd.h库稀奇古怪的lol,但是我怎么能得到它呢?它应该不会太难,现在可以了吧?lol我刚刚知道它是一个函数,但我不能#包含。有什么方法可以从某处下载它吗?@user1886339:头文件不是所需要的全部,它只是接口。你需要一个包含实现的库。看看我的链接派你来的。
#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)
        /* ... */
}