Newsgroup: it.comp.lang.c
Titolo: system

ciao una  domanda facile facile:
esiste un modo per inserire una variabile nella chiamata system?

esiste un modo per inserire una variabile nella chiamata system?
Puoi usare sprintf():
<CODE>
// C++ Builder, sotto Win2K
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char rigacmd[128], cmd[128];
    printf("Comando da lanciare: ");
    fgets(cmd, sizeof cmd, stdin);
    cmd[strlen(cmd)-1] = 0;
    sprintf(rigacmd, "cmd /c %s", cmd);
    system(rigacmd);
    return 0;
}
</CODE>
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

     fgets(cmd, sizeof cmd, stdin);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Come mai non sizeof(cmd) ?


Come mai non sizeof(cmd) ?
avrà sbagliato a scrivere...
--
Lawrence "Rhymes" Oluyede
rhy...@myself.com

avrà sbagliato a scrivere...
Non ho sbagliato, la mancanza delle parentesi e'
intenzionale.  In C, per sizeof, non sono necessarie se
l'argomento non e' un tipo.


l'argomento non e' un tipo.
Per quale motivo il mio compilatore ritorna un errore?
(Borland C++ Compiler 5.5.1)


(Borland C++ Compiler 5.5.1)
Che errore ti da' ?


Che errore ti da' ?
---------- Compile ----------
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
prova.c:
Error E2188 prova.c 5: Expression syntax in function main
*** 1 errors in Compile ***
Questo è il programma:
#include <stdio.h>
int main()
{
  printf("%d", sizeof int);
  return 0;
}
ovviamente con sizeof(int) funziona..


ovviamente con sizeof(int) funziona..
Leggili i messaggi.
Ho scritto: "In C, per sizeof, [le parentesi] non sono
necessarie SE L'ARGOMENTO NON E' UN TIPO".
Nel tuo caso e' un tipo, quindi le parentesi ci vogliono.


 avra` sbagliato a scrivere...
E` corretto. sizeof e` un operatore, non una funzione.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Un apostolo vedendo Gesu` camminare sulle acque:
- Cazzo se e` buono 'sto fumo!!!

     system(rigacmd);
Codice bacato ed exploitabile.... ;-)
-- 
http://fantoibed.cjb.net
  |   linux   |  
http://www.spippolatori.com
 UIN:62959208             | addicted  |  email:  
fant...@libero.it

Codice bacato ed exploitabile.... ;-)
Si', si', come no... eccone un altro ;-)


</CODE>
-- 
Mox

Il baco di cui parla lo spippolatore (si puoi usare questo termine)
Ops, sbagliato a scrivere, volevo dire "se si puoi usare questo
termine", non voleva essere offensivo o di scherno, scusate.
-- 
Mox

 Quindi basta dichiarare rigacmd di 128+7 oppure cmd di 128-7.
O meglio ancora usare snprintf.


 Si', si', come no... eccone un altro ;-)
--= 128car.sh permessi 755 =-
#!/bin/sh
echo -n "1234567890123456789012345678901234567890"
echo -n "1234567890123456789012345678901234567890"
echo -n "1234567890123456789012345678901234567890"
echo    "12345678"
-= ----------------------- =-
-= ------ bacato.c ------- =-
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char rigacmd[128], cmd[128];
   printf("Comando da lanciare: ");
   fgets(cmd, sizeof cmd, stdin);
   cmd[strlen(cmd)-1] = 0;
   sprintf(rigacmd, "cmd /c %s", cmd);
   /*system(rigacmd);*/
    return 0;
}
-= ----------------------- =-
~]$ ./128car.sh | ./bacato
Segmentation fault


Segmentation fault
Bravo, ti faccio un applauso...


ciao, qualcuno può spiegarmi esattamente come funziona la funzione system?
dovrebbe essere:
int system(const char *);
però ho provato a scrivere:
system("c:\programmi\cartella\file_eseguibile.exe.....ma non va.
mentre con system("regedit.exe); oppure system("cmd.exe"); funziona.
gentilmente se qualcuno mi spiega come system può essere usato grazie.


Mai sentito parlare di sequenze di escape? :)
Devi sostituire tutte le "\" con "\\" e vedrai che magicamente si
sistema il tutto :)
-- 
Mox

system("c:\programmi\cartella\file_eseguibile.exe.....ma non va.
Il carattere di "barra rovesciata" ha un significato speciale
per il compilatore C (hai presente "\n" ad esempio ?).
Per mettere un carattere di barra rovesciata in un literal devi
raddoppiarlo... prova con
   system("c:\\programmi\\cartella\\file_eseguibile.exe...
HTH
Andrea

 system("c:\programmi\cartella\file_eseguibile.exe.....ma non va.
il carattere \ e' speciale, e per usarlo va dato nella forma '\\' prova  
e vedrai...
gia' che ci sei, leggiti pure un buon libro sul C