【发布时间】:2013-06-08 21:18:14
【问题描述】:
我最近一直在玩getopt(来自 unistd.h)。我编写了一些在 Windows 7 下使用 MinGW 的 gcc 编译的代码,但在我的 Raspberry Pi 上的 Raspbian Linux 下无法正常工作(我使用 gcc 编译它们,没有选项;gcc t.c)。出于某种原因,当没有开关时,getopt 返回 int 255 或 char ÿ,而实际上它应该返回 -1。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char t;
opterr = 0;
while ((t = getopt(argc, argv, "a:")) != -1)
switch (t) {
case 'a':
printf("-a with argument %s\n", optarg);
return 0;
case '?':
printf("uknown option\n");
return 1;
default:
/* This is always 255 under linux, and is never reached under windows */
printf("getopt returned int %d (char %c)\n", t, t);
return 2;
}
return 0;
}
我遇到的一个问题是,实际上 255 是 -1 在 unsinged 8 位算术中,所以我尝试在 while 条件中放置一个 int 类型转换,但没有任何效果。
【问题讨论】:
-
Getopt() 返回一个 int。将
char t;更改为int t;,你会没事的。 (-1 表示 EOF,或者在这种情况下:没有更多选项。您可以通过添加case -1: break;来处理它) -
根据我的手册页,
getopt自 POSIX.2 以来没有返回EOF。找不到更多选项时返回 -1。 -
@CarlNorum 我不明白你的意思,需要详细说明吗?
-
wildplasser 提到了
EOF,我只是想澄清stdio.h中的实际EOF常量不是由getopt返回的,并且自1992 年左右以来就没有返回。跨度> -
好吧,我认为他将 EOF 称为“文件结束”,或者更确切地说是输入结束,而不是那个。