2016-03-26 3 views
-4

Ich versuche, ein einfaches c-Programm zu schreiben, das die C-Compiler-Version druckt. so schrieb ich:c Systemfunktion wird vor anderen Zeichenfolgen

#include <stdio.h> 
int main() { 
    printf("you have %d", system("gcc --version"); 
} 

die Ausgabe:

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4 
Copyright (C) 2013 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

you have compiler 0 

irgendeine Idee?

+0

Was ist Ihre Frage? –

+2

Haben Sie die ['system' man-Seite] (http://linux.die.net/man/3/system) gelesen? Was sagt Ihnen der Rückgabewert für 'system'? – kaylum

+1

Vielleicht möchten Sie den tatsächlichen Code, der die Ausgabe erzeugt, veröffentlichen, nicht etwas vage Ähnliches. Lesen Sie auch die Manpage für 'system()'. – EOF

Antwort

1

system führt einen Shell-Befehl aus und gibt den Status des Befehls zurück. Ein Wert von 0 bedeutet in diesem Fall, dass der Befehl erfolgreich ausgeführt wurde.

1

Ihr Anruf an printf druckt den Rückgabewert des system Aufrufs. Der Rückgabewert des Systemaufrufs gemäß man page ist der Rückgabestatus des aufgerufenen Befehls (in diesem Fall gcc).

Da der Aufruf von gcc erfolgreich ist, ist der Rückgabewert '0'. Das also ist der Wert von Ihrem Programm gedruckt:

you have compiler 0 
0

So:

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    FILE* fp; 
    unsigned major, minor, build; 
    system("gcc --version > gccoutput.txt"); 

    fp = fopen("gccoutput.txt", "r"); 
    if (fp) { 
     fscanf(fp, "gcc (GCC) %u.%u.%u", &major, &minor, &build); 
     printf("Major: %u, minor: %u, build: %u\n", major, minor, build); 
     fclose(fp); 
    } 
} 

Mein Ausgang war gcc (GCC) 4.6.2 etc

Also für die Ausgabe werden Sie muss sich ändern. Oder machen Sie es vor x.y.z auf jeder Saite arbeiten

Eine flexiblere Lösung verwenden:

fscanf(fp, "%[A-Za-z() ]%u.%u.%u", s, &major, &minor, &build); 

s ist ein char-Puffer.

Verwandte Themen