【问题标题】:Getopt and OptargGetopt 和 Optarg
【发布时间】:2016-03-11 13:16:58
【问题描述】:

您好,我正在研究书中的一个程序。该程序几乎按预期运行,除了一个错误。每次我尝试使用“-l”案例时,都会出现分段错误。有什么想法吗?

#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;
}

提前致谢。

【问题讨论】:

    标签: c case getopt


    【解决方案1】:

    第三个参数 get getopt 不应包含任何空格。因为有空格,所以它将这个参数读作“-l 不带参数,-(space) 带参数,-(space) 不带参数,-k 不带参数。

    由于 getopt 不希望 -l 传递参数,因此将 optarg 设置为 NULL,然后将其分配给 lieferung。然后取消引用该变量,导致段错误。

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

    while ((ch = getopt(argc, argv, "l:k")) != EOF){
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多