Bug su programma sulle stringhe in c

di il
6 risposte

Bug su programma sulle stringhe in c

Il programma è semplice, dovrebbe verificare se una stringa è palindroma oppure no. Compliando con gcc senza -Wall e Wextra non da errore, invece compliando con le W da degli strani errori come ad esempio:
multiple definition of '_fini'/..../ ...... : first defined here
ed altri errori del genere (dopo '_fini' c'+ il percorso di un file).
sapete come mai si crea questo tipo di problema e come si può risolvere?

posto anche il codice:


//verificare se una parola data in input è o no palindroma
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main(int argc,char *argv[]){
	int end,i,ris;
	char *str1,*str2;
	
	if (argc>1){
		end=(strlen(argv[1])-1);
		for (i=0;i<end;i++){
			*str1=argv[1][i];
			printf("%c \n",*str1);
			*str2=argv[1][end];
			printf("%c \n",*str2);
			ris=strcmp(str1,str2);
			if (ris!=0){
				printf("non è palindroma \n");
				return 	EXIT_SUCCESS;
			}
			end--;
			
		}
		printf("è palindroma \n");
		return EXIT_SUCCESS;
	}else{
		printf("errore \n");
		return EXIT_FAILURE;
	}	

}

6 Risposte

  • Re: Bug su programma sulle stringhe in c

    Tanto per cominciare, ripensa all'uso di *str1 e *str2 ... sono puntatori a char e tu li usi come char ...
  • Re: Bug su programma sulle stringhe in c

    Grazie intanto per la risposta, è vero mi sono reso conto che quello era un errore e ho modificato in questo modo:
    
    //verificare se una parola data in input è o no palindroma
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    
    int main(int argc,char *argv[]){
    	int end,i,ris;
    	char str1,str2;
    	
    	if (argc>1){
    		end=(strlen(argv[1])-1);
    		for (i=0;i<end;i++){
    			str1=argv[1][i];
    			printf("str1: %c \n",str1);
    			str2=argv[1][end];
    			printf("str2: %c \n",str2);
    			ris=strcmp(&str1,&str2);
    			printf("ris: %d \n",ris);
    			if (ris!=0){
    				printf("non è palindroma \n");
    				return 	EXIT_SUCCESS;
    			}
    			end--;
    			
    		}
    		printf("è palindroma \n");
    		return EXIT_SUCCESS;
    	}else{
    		printf("errore \n");
    		return EXIT_FAILURE;
    	}	
    
    }
    
    Adesso ho notato però che provando ad eseguire la funzione, il risultato di "ris" è un valore diverso da 0 anche quando str1 è uguale a str2 (ad esempio dando come input alla funzione aa o cc).
    Altra cosa strana è il fatto che la variabile ris mi risulti di valori anche molto alti (non dovrebbero essere 1,-1 o 0 i possibili valori che ritorna strcmp?).
  • Re: Bug su programma sulle stringhe in c

    Non hai bisogno di ris e di strcmp, essendo str1 e str2 entrambi dei char puoi confrontarli direttamente
  • Re: Bug su programma sulle stringhe in c

    Grazie cosi funziona
    ti posso chiedere per quale motivo non funziona lo stesso anche con strcmp? quando deve essere usato strcmp (basta un esempio) ?
  • Re: Bug su programma sulle stringhe in c

    http://www.cplusplus.com/reference/cstring/strcmp

    Quando devi confrontare 2 stringhe, come suggerisce il nome
  • Re: Bug su programma sulle stringhe in c

    Dai un'occhiata anche alla differenza in C tra un char e un array di char.
Devi accedere o registrarti per scrivere nel forum
6 risposte