嗨,我正在写一本书中的程序。除了一个错误之外,该计划几乎按照预期工作。每次我尝试使用“-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;
}
提前致谢。
答案 0 :(得分:3)
第三个参数get getopt
不应包含任何空格。因为有空格,所以它将此参数读为“-l不带参数, - (空格)带参数, - (空格)不带参数,-k不带参数。”
由于getopt
不希望-l传递参数,因此optarg
设置为NULL,然后您将其分配给lieferung
。然后取消引用该变量,导致段错误。
Git摆脱格式字符串中的空格:
while ((ch = getopt(argc, argv, "l:k")) != EOF){
答案 1 :(得分:1)
我认为格式不正确。将“l:k”替换为“l:k”。