sách gpt4 ai đã đi

Chơi với getopt

In lại 作者:太空宇宙 更新时间:2023-11-04 14:29:16 27 4
mua khóa gpt4 Nike

您好,我是编码新手,正在尝试找出此 getopt 不起作用的原因。我的编译器提示“i:o:”

错误 C2664“int getopt(int,char **,char *)”:无法将参数 3 从“const char [5]”转换为“char *”

int main(int argc, char *argv[])
{
int opt;
while ((opt = getopt(argc, argv, "i:o:")) != -1)
{
switch (opt)
{
case 'i':
printf("Input file: \"%s\"\n", optarg);
phá vỡ;
case 'o':
printf("Output file: \"%s\"\n", optarg);
phá vỡ;
}
}
trả về 0;
}

这很奇怪,因为当我阅读有关 getopt 的内容时,我看到了这个“选项参数是一个字符串,它指定了对该程序有效的选项字符。”

1 Câu trả lời

根据您的错误消息,getopt 函数需要一个可写 选项字符串。您可以像这样创建一个非常量字符数组来做到这一点:

int main(int argc, char *argv[])
{
// non-const char array
char opts[] = "i:o:"; // copy a string literal in

int opt;
while ((opt = getopt(argc, argv, opts)) != -1)
{
switch (opt)
{
case 'i':
printf("Input file: \"%s\"\n", optarg);
phá vỡ;
case 'o':
printf("Output file: \"%s\"\n", optarg);
phá vỡ;
}
}
trả về 0;
}

您的原始代码在 LinuxGCC v7 上对我来说工作正常。您使用的版本的函数签名似乎不同。

hiện hữucủa tôi系统上是:

int getopt (int argc, char** argv, const char* options);

但在您的系统上它似乎是:

int getopt(int,char **,char *);

最后一个参数缺少 hằng số 会导致错误,这就是为什么您需要给它一个非 const 字符串。

Để ý:我不建议为此使用 const_cast,因为有些人可能会受到诱惑。您永远不知道该功能是如何实现的,或者该内部实现是否会在某个时候发生变化。

关于c++ - 玩转 getopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49759879/

27 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com