2010-12-07 12 views
0

Hallo hahah noch einmal. C- Unix Im Lesen etwas wie folgt aus:Sscanf Problem und Lesen von der Kommandozeile

a.out [23 + 10 i]

sscanf(argv[count], "[%d%c%di]", &a, &operand1, &b); 

I trennen möchten wie folgt: a = 23 b = 10 Operand = '+ ' aber ich bekomme, dass segfault (Core Dump) Fehler, was mache ich falsch?

By the way, vielen Dank für

+0

Was ist der Wert von 'count'? Was sind die Deklarationen von "a", "operand1" und "b"? –

+1

Schwierig zu sagen, aber drucken Sie argv [count] um sicherzustellen, dass es das Argument ist, das Sie wollen. – xscott

+2

'[' ist ein Shell-Metazeichen und könnte dazu führen, dass Ihre Argumente nicht so sind, wie Sie es sich vorstellen. Erhalten Sie das gleiche Ergebnis, wenn Sie Ihr Argument so in Anführungszeichen setzen: './a.out" [23 + 10i] "'? –

Antwort

4

alle meine dummen Fragen beantworten Es funktioniert für mich

#include <stdio.h> 
int main(int argc, char **argv) { 
    int a, b; 
    char operand1; 
    int n; 

    printf("scanning argv[argc - 1]: %s\n", argv[argc - 1]); 
    /* It works for me */ 
    n = sscanf(argv[argc - 1], "[%d%c%di]", &a, &operand1, &b); 

    printf("%d values read\n", n); 
    if (n != 3) printf("there was an error in scanf ...\n"); 
    printf("The values were %d, %c, and %d\n", a, operand1, b); 
    return 0; 
} 

und einem Probelauf:

 
$ ./a.out [23+43i] 
scanning argv[argc - 1]: [23+43i] 
3 values read 
The values were 23, +, and 43 

Beachten Sie, dass argv[argc] ist ein NULL Zeiger.