Newsgroup: it.comp.lang.c
Titolo: Confronto tra strighe

Salve a tutto il newsgroup. E' il mio secondo giorno di c, e mi trovo
davanti ad alcuni problemi. Programmo gia' in php e python, quindi per me
la difficolta' e' maggiore dato che qui i dati vanno dichiarati e io non
sono per nulla abituato. Ho preso un libro dell'apogeo prgrammare in C
scritto da Aitken, mi piace solo che non e' profondo, molte cose te le fa
prima vedere e poi te le spiega molti capitoli dopo, comunque la lettura e'
chiara, anche se secondo me spiega male le strighe. Vengo al dunque. Ho
scritto questo come esercizio:
#include <stdio.h>
main()
{
        char *segreta="prova";
        char password[20];
        printf("\nInserire la password:");
        scanf("%s", &password);
        if("%s", password == "%s", segreta){
                printf("\n password esatta\n");
                return 0;
        }
        else{
        printf("\nSpiacente, password errata");
        }
        return 0;
}
Ho scritto questo per provare il confronto tra stringhe, ho settato la
variabile segreta contiene la stringa "prova" e password e' un'input da
tastiera, in pratica secondo i prgramma le stringhe sono smpre uguali!
E' una domanda da niubbone lo so, ma sono alle prime armi.
Un'altra cosa nel libro non ho capito nulla riguardo a ai puntatori. Cioe'
dice cheio posso inizializzare una striga cosi':
char *stringa1="lastringa"
in pratica la inizializzo dicendogli di contare dal primo carattere della
stringa, quale'e' il suo scopo? inoltre vedo che viene usato anche in altri
programmi, la sua spiegazione e' scarsa. Grazie in anticipo per le vostre
risposte.
Ciao.

 char *stringa1="lastringa"
presto vedrai che i puntatori sono croce e delizia del programmatore C. 
Ti consiglio questo link:
http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/19Puntarray.html

 l'indirizzo del suo primo elemento.
Non sempre, diciamo che nella maggior parte dei casi un array "decade"
nel puntatore al suo primo elemento.

 else { ...}
Oppure se vuole capire come le confronta puň realizzare lui stesso una
funzione di confronto che vada a considerare non le stringe ma bensě i
caratteri delle stringe.
for(i=0;i<STR_DIM;i++)
     if (segreta[i]!=password[i]) return (1)
return(0);
se non erro  l'if puň anche essere fatto cosě:
if (*segreta+i != *password+i) return (1)
visto che cmq l'allocazione della memoria dovrebbe avvenire in modo che i
caratteri della stringa siano contingui (e quindi mi basta reindirizzare il
puntatore)
--
Fabio
-----------------
"Tutti abbiamo udito la donnetta che dice <Oh! E' terribile quello che fanno
questi
 giovani a se stessi, secondo me la droga č una cosa tremenda!> poi tu la
guardi,
la donna che parla in questo modo: č senza occhi, senza denti, senza
cervello,
senz'anima, senza culo nč bocca, nč calore umano e ti chiedi come avran
fatto
a ridurla in quello stato il tč coi pasticcini e la chiesa.."   C. Bukowski
http://www.atheist.too.it
-----------------

 nel puntatore al suo primo elemento.
Infatti avrai notato l'avverbio "sostanzialmente" e il link a una pagina
che spiega meglio 
analogie e differenze tra array e puntatori.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Grazie a tutti per le risposte, mi rifiondo sugli esperimenti e vediamo cosa
ne tiro fuori.

 19Puntarray.html
Incuriosito, ho dato un'occhiata veloce al link... questi corsi sembrano 
davvero ben fatti! Complimenti agli autori! (Non sapevo di questa utile 
risorsa online!)
Bye
Dan

 primi esperimenti.
Tanto per chiarire: non c'č niente di complicato nell'utilizzo di
fgets().

> if (*segreta+i != *password+i) return (1)
L'operatore * ha una precedenza maggiore rispetto all'addizione tra
puntatore e scalare.
Quindi quello che hai scritto è sbagliato, bisogna adoperare le
parentesi per dare la priorità corretta:
if (*(segreta+i) != *(password+i)) ...
In ogni caso, è bene non complicarsi la vita e continuare ad usare:
if (segreta[i] != password[i]) ...

modificata)."
Anche questa è una stupidaggine; la scrittura:
char *mionome = "andrea";
è del tutto lecita in C.  Quello su cui non bisogna fare affidamento è
che il puntatore punti a della memoria modificabile.
Evito di commentare il resto...

 analogie e differenze tra array e puntatori.
Quella pagina è piena di stupidaggini.

 poco il C (e tanto meno il C++).
E' vero; probabilmente gli autori volevano affermare che in C gli array 
sono molto "legati" ai puntatori; comunque, certo... le due cose non 
coincidono.
Avevo dato un'occhiata *molto veloce*; se errori di quel tipo ve ne sono 
molti, e' d'obbligo da parte mia chiedere scusa! Sorry
Dan