gpt4 book ai didi

c - Getopt 和 Optarg

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:33 27 4
gpt4 key购买 nike

您好,我正在研究一本书中的一个程序。该程序几乎按预期运行,除了一个错误。每次我尝试使用“-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;
}

提前致谢。

最佳答案

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

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

Git 删除格式字符串中的空格:

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

关于c - Getopt 和 Optarg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35941263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com