Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C/C++] IF e controllo su stringhe

    salve a tutti!!

    il mio problema riguarda un semplicissimo if . passo una stringa tramite puntatore ad una funzione. nella sottofunzione c'è il suddetto if che deve controllare il valore della variabile puntatore a caratteri (stringa) passata e fare le relative operazioni.

    per semplificare scrivo anche delle linee del codice da me usato (e non funzionante):

    nel programma chiamante:

    ...

    /*dichiarazione della stringa*/
    char *girone;
    int n=2;

    /*allocazionedella stringa (non sapevo se necessaria, ma mi sembra di si)*/
    girone = (char *)calloc(n, sizeof(char));

    /*input da tastiera del valore da assegnare alla stringa*/
    scanf("%s", girone);

    /*richiamo della funzione*/
    inserimento_gironi(girone);
    ...


    nel programma chiamato (il prototipo è "void inserimento_gironi(char *girone)"):


    ...

    /*si commentano da sole...*/

    printf("\nGirone scelto: %s", girone);

    if (girone == "a")
    {
    if ((fp=fopen("par_a.txt", "a")) == NULL)
    {
    printf("\nErrore apertura par_a.txt");
    }
    printf("\nApertura del file par_a.txt in corso...\nFile aperto con successo!");
    }


    le linee fanno quello che devono fare fino al solito ciclo if (quello che controlla "girone == "a""). ed è proprio la condizione che ho imposto che non mi convince per nulla, ma non riesco proprio a trovare il modo per risolvere.

    grazie

    JmDeF
    Non c'è cattivo più cattivo, di un buono quando diventa cattivo!!!
    MyMind.it

  2. #2
    codice:
    ...
    if( girone == "a" )
    ...
    Questo codice purtroppo non fa ciò di cui tu hai bisogno. In effetti fa un confronto fra indirizzi (dato che sono puntatori), e non un controllo carattere per carattere. Quello che ti serve, in senso lato, è confrontare due array, elemento per elemento. La funzione 'strcmp' fa al caso tuo!

    codice:
    #include <string.h>
    ...
    if( strcmp( girone, "a" ) )
    'strcmp' restituisce 0 se le due stringhe sono uguali. Per eventuali precisazioni puoi consultare la guida sulla libreria C, dato che questa è una delle funzioni C standard per la manipolazione delle stringhe.

    Ciao.

  3. #3
    grazie r0x, provo immediatamente....
    Non c'è cattivo più cattivo, di un buono quando diventa cattivo!!!
    MyMind.it

  4. #4
    Scusa ho sbagliato scrivendo:

    codice:
    if( strcmp( girone, "a" ) )
    Deve essere:

    codice:
    if( !strcmp( girone, "a" ) )  // if( strcmp( girone, "a" ) == 0 )
    Sorry!

  5. #5
    Reale_Augello
    Guest

    Mi raccomando...

    ... ad includere string.h !


  6. #6

    Debugger

    :quote:
    1)confronto tra stringhe di cartteri:
    <string.h> header file
    int strcmp(s1,s2);
    restituisce: 0 se s1 è alfabeticamente uguale a s2
    <0 se s1 precede alfabeticamente s2
    >0 se s1 postdece alfabeticamente s2
    esempio
    s1="sasso",s2="sassol" strcmp() restituisce >0

    2)allocazione dinamica
    girone=(char*)talloc(n,sizeof(char));ALLOCA UNA VARIABILE
    DINAMICA DI 2 byte
    Quindi se da tastiera io immetto una stringa con piu' di 2 caratteri
    (eh eh)il programma sovrascrive aree di meoria in uso da altri programmi,in genere quelli del sistema operativo
    provocando un bel "crash di sistema" nella migliore ipotesi
    In sintesi:capire cosa si sta facendo prima di farlo
    (gli Hacker seri crashano i sistemi proprio perchè
    chi fa i programmi commette questi errori,loro che invece
    conoscono a fondo il C ne aprofittano)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.