Newsgroup: it.comp.lang.c
Titolo: E' normale il comportamento di strcmp?

Ciao a tutti.
Ponendo:
x=strcmp(stringa1,stringa2);
x assume il valore 0 se stringa1 è uguale a stringa2, però ciò non accade se
stringa1 è stata letta da file mediante fgets e stringa2 (dalla tastiera)
mediante gets. In questo caso per l'esattezza x assume (sempre nel caso che
stringa2 sia uguale a stringa1) il valore 10. Come mai?



Conosco il C da poco, ma mi pare che gets non sia del tutto uguale a fgets
su stdin. Mentre la prima non restituisce l'invio, la seconda lo fa.
Ripeto, mi pare che sia cosi...
Per questo le due stringhe dovrebbero risultare diverse.
--
Marco Iannaccone
"Questa è una nave moderna, ma ha un nome antico e glorioso...
Trattala come una signora e ti riporterà sempre a casa"

 e stringa2 (dalla tastiera) mediante gets. 
gets() e fgets() hanno comportamenti diversi. Leggi con attenzione
la documentazione e troverai la soluzione.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 stringa2 sia uguale a stringa1) il valore 10. Come mai?
Perché, mentre gets() legge la stringa escluso il '\n' finale, fgets()
lo include.
EMG

Probabilmente in un caso viene eliminato il CR alla fine (il tasto invio), e
nell'altro no.
--
Alessandro Monti

stringa2 sia uguale a stringa1) il valore 10. Come mai?
Soluzione (che spero funzioni) :
#include <stdio.h>
#include <string.h>
main()
{
    char s[100], t[100] ;
    printf( "scrivi una stringa : " ) ;
    gets( s ) ;
    printf( "scrivi un'altra stringa : " ) ;
    fgets( t, 100, stdin ) ;
    t[strlen(t)] = 0 ;
 
    if ( strcmp( s, t ) == 0 ) 
       puts( "le stringhe sono uguali !" ) ;
}
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

     t[strlen(t)] = 0 ;
No, questa è sbagliata. Se 
 char a[] = "Anna";
strlen(a) mi dà 4, ma a[4] è l'ultimo elemento dell'array
che già contiene lo '\0'.
Meglio
      t[strlen(t) - 1] = '\0';


che gi=E0 contiene lo '\0'.
Attento, questo vale per una stringa normale, ma nel caso di fgets()
ho letto anche '\n' finale, e' per questo che se ho :
t = "Anna\n"
devo usare strlen(t) e non strlen(t)-1.


devo usare strlen(t) e non strlen(t)-1.
E' una cazzata !!!! hai ragione ! ;)


 devo usare strlen(t) e non strlen(t)-1.
Ma che stai scrivendo ? Per strlen() il '\n' è un carattere come gli
altri:
[root@fokhouse /tmp]# cat lung.c
#include <stdio.h>
#include <string.h>
int main(void)
{
        char a[] = "Anna\nMaria\n";
        int lun = strlen(a);
        printf("%d\n", lun);
        fputs(a, stdout);
        /* elimino l'ultimo '\n' */
        a[lun - 1] = '\0';
        fputs(a, stdout);
        return 0;
}
[root@fokhouse /tmp]# gcc -o lung lung.c -Wall -ansi -pedantic
[root@fokhouse /tmp]# ./lung
11
Anna
Maria
Anna
Maria[root@fokhouse /tmp]#


 stringa1 è stata letta da file mediante fgets e stringa2 (dalla tastiera)


altri:
E' strano che alle 19:00 tu non abbia letto un mio messaggio delle
15:00 ;))


 15:00 ;))
Ma è così. Ho risposto intorno alle 15 e passa, mentre spedisco 
e scarico le news generalmente dopo le 18.30. 8)
Inoltre che ci sarebbe di strano ? Le news non sono considerate
particolarmente veloci.
