View Full Version : [c] uguaglianza stringhe
MinaVagante
15-03-2008, 12:32
Ciao a tutti, volevo chiedervi, perchè non è possibile fare una cosa del genere??
#include<stdio.h>
#include<stdlib.h>
int main()
{ char prova[100];
printf("Inserire stringa:\n");
scanf("%s",prova);
if(prova == "#include<")
printf("Le stinghe sono uguali");
else
printf("Le stirnghe sono diverse");
return 0;
}
grazie
per il confronto di stringhe devi usare strcmp
carter100
15-03-2008, 12:37
Come lo fai tu, confronti l'indirizzo di allocazione delle stringhe
maulattu
15-03-2008, 12:39
per il confronto di stringhe devi usare strcmp
ma direi anche di
buttar via la scanf e usare fgets
usare strncmp
punto 1)
http://digilander.libero.it/uzappi/C/librerie/funzioni/fgets.html
fgets(prova, sizeof(prova), stdin);
prova[sizeof(prova) - 1] = 0; // così forziamo per sicurezza il finestringa
se usi scanf() o gets() rischi alla grande un bel buffer overflow. esempio:
char prova[5];
Significa che posso avere al massimo 4 caratteri (posizione 0,1,2,3), mentre uno serve per il finestringa '\0' (posizione 4).
se in input digito:
ciao,ora ti sfondo alla grande il buffer
ho dunque 40 caratteri in totale da leggere, più devo tener conto del finestringa (41 in totale). Significa che sfondo la variabile prova e strabordo nella zona di memoria successiva alla variabile prova di 41-5=36 byte.
con la fgets avrei nella variabile prova "ciao".
punto 2)
strncmp(prova, "#include<", sizeof(prova));
quando usate il C abituatevi a usare funzioni "safe"... il C è un gran bel linguaggio, tanto potente quanto dannoso se non utilizzato coi sacri crismi.
se poi scrivete codice del genere e vi si incrista il software inspiegabilmente, andare a trovare queste rogne può essere assai difficile :read:
MinaVagante
15-03-2008, 12:57
grazie mille delle risposte.
avrei un altro problema :D in un programma devo estrarre il nome di un file da un altro file.txt
nel main ho dichiarato le stringhe:
nome_file_da_includere[MAX],riga_file_incluso[MAX]
che le passo alla seguente funzione:
void estrai_nome(char riga_input[],char nome_file_da_includere[])
{ int indice=0;
while((riga_input[indice]) != '<')
indice++;
indice++;
for(indice;indice <= (strlen(riga_input)-2);indice++)
nome_file_da_includere[indice] = riga_input[indice];
nome_file_da_includere[indice]='\0';
printf("In funzione:%s\n",nome_file_da_includere);
return;
}
nel main la chiamo così:
estrai_nome(riga_input,nome_file_da_includere);
praticamente ho un file, in cui, se compare un #include<nome_file.txt>,
nella stringa nome_file_da_includere devo salvare nome_file.txt
solo che quando lo faccio partire mi esce una stringa tutta strana. E'dovuto al fatto che passo all funzione una stringa non inizializzata??
grazie
MinaVagante
15-03-2008, 13:05
che scemo che sono, ho capito grazie :D
MinaVagante
15-03-2008, 13:22
ragazzi scusate ma ho seri problemi ad andare d'accordo col c :D
allora, io in una cartella ho un file che si chiama primo_incluso.txt
nel mio programma, ho una stringa, di nome: nome_file_da_includere
stampo la stringa e mi scrive che e':
primo_incluso.txt
e fin qui tutto a posto.
poi però scrivo
if((fpincluso = fopen( nome_file_da_includere,"r")) == NULL)
{ printf("Errore nell'apertura di un file d'inclusione");
exit(EXIT_FAILURE);
}
e se faccio partire il programma mi scrive sempre errore nell'apertura del file.
Se invece,quando vado ad aprire il file,scrivo fopen("primo_incluso.txt","r") il programma funziona correttamente....:confused: perchè??
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.