2012-04-11 10 views
0

Ich möchte eine ganze Zahl als Parameter an die system() Funktion in C senden, aber ich war nicht in der Lage.Parameter zur System() Funktion?

Ich möchte dies tun, weil ich einige jpg-Dateien habe, die regelmäßig als 1.jpg , 2.jpg ... 17.jpg ... ect. benannt werden. Das Programm würde einen zufälligen Wert einer Integer-Variablen zuweisen und die Bilddatei mit dem gleichen Namen wie die zufällig gewählte ganze Zahl öffnen mit der system() Funktion.

Was ich vorstellen:

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

main() 
{ 
    srand(time(NULL)); 
    i=rand()%30+1; // for example i=17 
    system("eog %d.jpg &",i); //and i want to open 17.jpg here with eog 
} 

Ich weiß, dass es zu viele Argumente oben auf die system() Funktion sind; Ich wollte nur ein Beispiel geben von dem, was ich wollte.

Gibt es eine Möglichkeit, dies zu tun, und wenn nicht, wie sonst könnte ich das tun, was ich oben beschrieben habe?

Antwort

1

Sie müssen die ganze Zahl in einem String-Argument konvertieren:

int runSystem(const char *fmt, ...) 
{ 
    char buffer[4096]; 
    va_list va; 
    va_start(va, fmt); 
    vsnprintf(buffer, sizeof(buffer), fmt, va); 
    va_end(va); 
    return system(buffer); 
} 

main() 
{ 
    srand(time(NULL)); 

    i=1+rand()%30; // for example i=17 

    runSystem("eog %d.jpg &",i); //and i want to open 17.jpg here with eog 

} 
+0

Danke. Ich bin nicht professionell wie du, es ist schwer für mich :) Ich arbeite daran, deine Antwort jetzt zu verstehen :) – J3y4Nf3R

5

Verwenden Sie snprintf, um Ihre Zeichenfolge zu erstellen und diese an system zu übergeben.

char cmd[LEN]; 
snprintf(cmd, sizeof(cmd), "eog %d.jpg &", i); 
system(cmd); 
+0

thanx Typ. Es ist sehr hilfreich für mich;) – J3y4Nf3R