PDA

View Full Version : [C] - Passaggio di argv[] a una funzione


Tyler Darden
09-12-2007, 19:55
Sto cercando di fare una bozza, ma ho problemi sui puntatori. Mi date una mano?


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

int Controllo1(char argv[]);

int main(int argc, char *argv[]){

int i;

switch(argc){

case 2: i = Controllo1(argv[1]);
if(i == 0) printf("OK\n");
else printf("KO\n");
return 0;

default: printf("default\n");
return 0;

}
}

int Controllo1(char argv[]){
if(strcmp(argv[1], "c") == 0)
return 0;
else
return 1;
}


Ciao.

vizzz
09-12-2007, 20:30
passandogli argv[1] passi un singolo char * alla funzione

ilsensine
09-12-2007, 20:31
argv[1] è un char *, non un char **.
Inoltre tieni conto che argv va da argv[0]...argv[argc-1], quindi argv[1] c'è se argc>1.

Tyler Darden
09-12-2007, 20:39
si si so come lavora argv[] solo che ho problema sul punatore che passo alla funzione o alla strcmp infatti mla shell mi ritorna questo errore:

prova.c: In function ‘Controllo1’:
prova.c:25: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

ilsensine
09-12-2007, 20:42
In quanto in _quella_ funzione argv[1] è un semplice char.

Tyler Darden
09-12-2007, 20:51
scusa nn doveva essere un singolo char .. ho erroneamente cancellato dove nn dovevo diciamo che ho una stringa "ciao" ecco il codice:


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

int Controllo1(char * argv);

int main(int argc, char *argv[]){

int i;

switch(argc){

case 2: i = Controllo1(argv[1]);
if(i == 0) printf("OK\n");
else printf("KO\n");
return 0;

default: printf("default\n");
return 0;

}
}

int Controllo1(char * argv){
if(strcmp(argv[1], "ciao"))
return 0;
else
return 1;
}


mi ritorna questo:
copia.c: In function ‘Controllo1’:
copia.c:25: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

ilsensine
09-12-2007, 20:54
Continua ad essere un singolo char. C'è ben poca differenza in char *argv e char argv[]

Tyler Darden
09-12-2007, 21:04
ok ok ... sembra che ho risolto. grazie per essermi stato dietro.
ciao.