1

我是 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 并且我无法得到它。有谁知道我在哪里可以得到它?

4

3 回答 3

1

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

于 2012-12-07T19:04:02.433 回答
1

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

这不是函数声明仅供参考,该行声明了一个指向 char 的指针并用 value 初始化它0。当前代码有意义的唯一方法是 ifgetopt是一个函数指针,它不是。

您的代码应该是:

#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)
        /* ... */
}
于 2012-12-07T18:59:50.227 回答
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
于 2012-12-07T18:56:36.910 回答