| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  09-12-2007, 20:55 | #1 | 
| Member Iscritto dal: Apr 2006 
					Messaggi: 59
				 | 
				
				[C] - Passaggio di argv[] a una funzione
			 
		Sto cercando di fare una bozza, ma ho problemi sui puntatori. Mi date una mano? 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], "c") == 0)
    return 0;
  else
    return 1;
}Ultima modifica di Tyler Darden : 09-12-2007 alle 21:43. | 
|   |   | 
|  09-12-2007, 21:30 | #2 | 
| Senior Member Iscritto dal: Mar 2006 Città: Bergamo 
					Messaggi: 2499
				 | 
		passandogli argv[1] passi un singolo char * alla funzione
		 
				__________________  ho concluso con: kvegeta, doctordb, Leland Gaunt. | 
|   |   | 
|  09-12-2007, 21:31 | #3 | 
| Senior Member Iscritto dal: Apr 2000 Città: Roma 
					Messaggi: 15625
				 | 
		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. 
				__________________ 0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 | 
|   |   | 
|  09-12-2007, 21:39 | #4 | 
| Member Iscritto dal: Apr 2006 
					Messaggi: 59
				 | 
		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 | 
|   |   | 
|  09-12-2007, 21:42 | #5 | 
| Senior Member Iscritto dal: Apr 2000 Città: Roma 
					Messaggi: 15625
				 | 
		In quanto in _quella_ funzione argv[1] è un semplice char.
		 
				__________________ 0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 | 
|   |   | 
|  09-12-2007, 21:51 | #6 | 
| Member Iscritto dal: Apr 2006 
					Messaggi: 59
				 | 
		scusa nn doveva essere un singolo char .. ho erroneamente cancellato dove nn dovevo diciamo che ho una stringa "ciao" ecco il codice: 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;
}copia.c: In function ‘Controllo1’: copia.c:25: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast | 
|   |   | 
|  09-12-2007, 21:54 | #7 | 
| Senior Member Iscritto dal: Apr 2000 Città: Roma 
					Messaggi: 15625
				 | 
		Continua ad essere un singolo char. C'è ben poca differenza in char *argv e char argv[]
		 
				__________________ 0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 | 
|   |   | 
|  09-12-2007, 22:04 | #8 | 
| Member Iscritto dal: Apr 2006 
					Messaggi: 59
				 | 
		ok ok ... sembra che ho risolto. grazie per essermi stato dietro. ciao. | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 04:52.









 
		 
		 
		 
		







 
  
 



 
                        
                        










