Strcmp e caricamento

di
Anonimizzato4887
il
2 risposte

Strcmp e caricamento

Ciao ragazzi/e ho qst problema:

#define DIM 10
int i;
char **x = (char **) malloc (sizeof(char*)*DIM);
for(i=0;i<DIM;i++){
      x[i] = (char*) malloc (sizeof(char)*DIM);
      char a[]={"987654321"};
      *x[i]=a[i];
      printf("x %s \n",x[i]);
      printf("a %c \n",a[i]);
}
i caratteri che carico in *x vettore di puntatori a carattere sono sporcati e ho anche notato che la strcmp non lavora come dovrebbe per esempio:

printf("%d \n", strcmp("15","2")); // risultato -1
printf("%d \n", strcmp("2","15")); // risultato 1
printf("%d \n", strcmp("52","274")); // risultato 1
printf("%d \n", strcmp("146","256")); // risultato -1
la libreria la strcmp dovrebbe comparare le 2 stringhe e stabilire quale sia la maggiore ma in verità confronta solo il primo carattere della stringa!!!! in attesa di un vostro aiuto vi saluto

2 Risposte

  • Re: Strcmp e caricamento

    Ciao, per il primo quesito non so come sia l''output, o quello che vuoi ottenere ma prova cosi:
    
            #define DIM 10
    	int i;	
    	char **x = (char **) malloc (sizeof(char*)*DIM);
    	for(i=0;i<DIM;i++)
    	{
          x[i] = (char*) malloc (sizeof(char)*DIM);
    
          char a[]={"987654321"};
          //*x[i]=a[i];
    	  strcpy(&*x[i],&a[i]); //utilizza la strcpy 
          printf("x %s \n",x[i]);
          printf("a %c \n",a[i]);
    	}
    
    per quanto riguarda il secondo quesito invece la strcmp verifica se le due stringhe sono uguali e no se una è più lunga dell'altra, e per farlo confronta lettera per lettera le due stringhe. E restituisce 1 nel caso la prima è maggiore dell'altra e -1 al contrario. Per esempio:
    strcmp("ciao","mondo") ritorna -1 perchè c viene prima di m.
    strcmp("ciao","albero") ritorna +1 perchè a viene prima di c.
    strcmp("ciao","caio") ritorna +1 perchè a viene prima di i.

    spiegando meglio la situazione se vuoi confrontare due parole in ordine alfabetico per esempio casa con albero utilizzi strcmp("casa","albero") ritorna 1 perchè albero viene prima di casa.
    Nel tuo caso i numeri sono comunque stringhe quindi strcmp("15","2"); 1 viene prima di 2 quindi ritorna -1. facendo invece strcmp("35","2") ritorna 1 perchè 2 viene prima di 3.
    Spero di essere stato chiaro.
    Ciao.
  • Re: Strcmp e caricamento

    Ho risolto grazie per evitare che i caratteri si sporchino basta fare
    
    int i;
    char **x = (char **) malloc (sizeof(char*)*DIM);
    for(i=0;i<DIM;i++){
          x[i] = (char*) malloc (sizeof(char)*DIM);
          char a[][2]={"9","8","7","6","5","4","3","2","1","0"};
          x[i]=a[i];
     }
    per la strcmp ho capito come funziona ciao e grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte