webForumDet fria alternativet

system() och argument

C/C++

2 svar · 330 visningar · startad av jockee

Medlem sedan sep. 200024 inlägg
Frågan#1

Undrar om system() funktionen, skulle behöva köra ett program med ett argument som är en variabel just nu.
Nån som vet hur man gör? Hittade det här i man sidorna men det hjälper inte direkt, för variablen jag vill skicka är ett heltal och det blir helt fel. int nollan blir char null t.ex.

char *argv[4];
argv[0] = "sh";
argv[1] = "-c";
argv[2] = command;
argv[3] = 0;
execve("/bin/sh", argv, environ);

note: jag ska låna den där stephen prata's bok så ni slipper mig men det är nån dryg en som lånat den, så tills den kommer tillbaks måste jag fråga er.

[Redigerat av jockee den 24 aug 2001]

Medlem sedan aug. 200086 inlägg
#2

Såhär kanske (om du har ett "fast" tal):

argv[3] = "0";
argv[4] = 0;

Alternativt (variabel):

char buf[10];
int tal = 0;
snprintf( buf, sizeof( buf ), "%d", tal );
argv[3] = buf;
argv[4] = 0;

Du kan dock inte direkt peka på heltal, eftersom execve tar charlista.. Annars verkar det enklast med:

char execbuf[1024];

snprintf( execbuf, sizeof( execbuf ), "%s %d", command, tal );
system( execbuf );

Medlem sedan maj 20018 027 inlägg
#3

char *argv[4]; deklarerar en array med fyra pekare mot char.

argv[3] = 0;
ger dig problem eftersom argv[3] är en av dessa pekare. Vad du gjorde var att peka mot NULL. C-strängen argv[3] är därmed tom. Vill du ha talet 0 får du sätta det på följande sätt:
argv[3] = "0";
Programmet "sh" som du anropar, tar alla argument som strängar. Behövs det kommer vissa av argumenten omtolkas till heltal eller vad som nu behövs. Därför är det ingen idé att skicka 0 som heltal redan från början. Detta gäller för övrigt alla program som anropas från kommandoraden.

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)