PDA

Visualizza la versione completa : [c] comparare tra due variabili


matteo martis
08-07-2011, 19:29
Salve,
devo comparare il valore di una variabile
char *key[] con il valore di una variabile char s[],
ma non mi viene.
alla variabile s faccio il casting per farlo diventare char* r,
ma la strcmp crasha ugualmente.
grazie!

Celebron
08-07-2011, 19:43
edit: letto male.

la strcmp vuole due char* come parametri

il tuo char *qualcosa[] come un char**, infatti il compilatore dovrebbe segnalartelo.

matteo martis
08-07-2011, 19:53
capito, cmq a me dava un problema al secondo parametro a quello s[].

oregon
08-07-2011, 20:41
Il fatto che sono tipi di dati diversi e non puoi confrontarli.

Mostra il codice che utilizza quei dati e ne parliamo meglio ...

matteo martis
08-07-2011, 20:49
la funzione questa:


Bool is_keyword(char s[]) {
int i;
char* r;

r = (char* ) s;
Bool is_key = FALSE;

for(i = 0; i < numkey; i++)
if (strcmp(keywords[i],s)==0)
is_key = TRUE;

return is_key;

}
la dichiarazione della prima variabile e questa:

/ variabile globale per le parole riservate del linguaggio
char *keywords[]={"auto","break","case", "const", "continue","default", "do","double","else","enum","extern","float", "for", "goto", "if", "int","long","register","return","short","signed", "sizeof", "static", "struct","switch","typedef","unsigned", "void", "volatile","while",NULL};

la variabile s[] il parametro formale del value della seguente struttura:


//definizione del tipo di dato Token
typedef struct { TokenType type; // TokenType.
char value[MAX_STRING_LENGTH]; // valore del token. } Token;

grazie!!

oregon
08-07-2011, 21:12
Scusa ... il problema, in questo codice, qual ?

matteo martis
08-07-2011, 21:19
la funzione is_keyword chrasha quando arriva alla funzione strcmp()

oregon
08-07-2011, 21:20
A me no ... probabilmente devi controllare il valore di numkey ...

matteo martis
08-07-2011, 21:23
il valore di numkey 31 ... contai ad uno ad uno gli elementi per essere sicuro che non sbagliassi

oregon
08-07-2011, 21:30
Originariamente inviato da matteo martis
contai

E "contasti" male ... le stringhe sono 30 ... l'ultimo elemento un NULL che non devi utilizzare (a meno di non volere un crash).

Quel NULL potrebbe servire come "tappo" per finire i confronti, ma il codice dovrebbe essere diverso (a proposito, tu perch hai aggiunto quel NULL?)

Ad esempio, un codice che utilizza il NULL evitando di sapere quante sono le parole



int i=0;
while(keywords[i])
if(strcmp(keywords[i++],s)==0)
is_key = 1;

Loading