getopt(3) mit optionalen Wert

Gast #2409677
Lesenswert?

hi leute!

folgender code:
1
while ((opt = getopt(argc, argv, "k.a. was hier genau herkommt")) != -1){
2

3
  switch(opt){
4

5
    case 'f':
6
    hide();
7
    break;
8
      
9
    case 'h':
10
    find();  
11
      
12
    case 'o':
13
    break;
14
      
15
    default:
16
  }
17

18
}

jetzt zur erklärung:
SYNOPSIS: programm -f|-h [-o<filename>]
beim case 'f' gibts jetzt kein problem. nur wie mach ich das, dass bei h 
noch ein o folgen kann, aber nicht muss und der wert hinter o gleich 
verwendet werden kann, weil das der name für eine neue datei wird?

lg
stefan
#2409966
Lesenswert?

Steht doch schön in der Doku:
1
int main(int argc, char *argv){
2
 char *filename == NULL;
3
 int c;
4

5
while ((c= getopt(argc, argv, "fho:")) != -1){
6

7
  switch(c){
8

9
    case 'f':
10
      hide();
11
      break;
12
      
13
    case 'h':
14
      find();  
15
      break;
16
  
17
    case 'o':
18
      filename = optarg; //pointer auf String speichern
19
      break;
20
      
21
    default:
22
  }
23

24
}
25
}

"fho:" => ein Parameter ohne zusätzlichem Wert hat keinen Doppelpunkt, 
ein Parameter auf dem noch etwas folgt (in diesem Fall ein String für 
den Parameter "-o" ) hat ein Doppelpunkt.
Damit dein "find()" dann auch den optionalen Wert von "o" verwenden kann 
musst du das natürlich erst nach deinem Switch machen. Also noch eine 
Zusätzliche Abfrage "if(h_isset && !filename)..."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren