首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Getopt和Optarg

Getopt和Optarg
EN

Stack Overflow用户
提问于 2016-03-11 21:16:58
回答 2查看 262关注 0票数 0

嗨,我正在写一本书中的一个程序。除了一个错误之外,程序几乎像它应该的那样工作。每次我尝试使用"-l“案例时,我都会得到一个分割错误。有什么想法吗?

代码语言:javascript
复制
#include <stdio.h> 
#include <unistd.h>

int main(int argc, char *argv[])
{
    char *lieferung = "";
    int knusprig = 0;
    int zahl = 0;
    char ch;

while ((ch = getopt(argc, argv, "l : k")) != EOF){
    switch (ch) {
        case 'l':
            lieferung = optarg;
            break;
        case 'k':
            knusprig = 1;
            break;
        default:
            fprintf(stderr, "Unbekannte Option: '%s'\n", optarg);
            return 1;
    }
}
argc -= optind;
argv += optind;

if (knusprig)
    puts("Knuspriger Rand.");
if (lieferung[0])
    printf("Zu liefern: %s.\n", lieferung);

puts("Zutaten:");
for (zahl = 0; zahl < argc; zahl++)
    puts(argv[zahl]);
return 0;
}

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-03-11 21:29:05

第三个参数get getopt不应该包含任何空格。因为有空格,所以它将此参数读取为"-l不带参数,-(空格)带参数,-(空格)不带参数,-k也不带参数。

由于getopt不希望-l传递参数,因此将optarg设置为NULL,然后将其赋给lieferung。然后,您取消对该变量的引用,从而导致了segfault。

Git去掉了格式字符串中的空格:

代码语言:javascript
复制
while ((ch = getopt(argc, argv, "l:k")) != EOF){
票数 3
EN

Stack Overflow用户

发布于 2016-03-11 21:29:15

我认为格式是不正确的。将"l:k“替换为"l : k”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35941263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档