wieso funktioniert das nicht ???



  • char *nam = "hallo";

    char *name = new char[15];

    name = "hallo";

    if(nam == name)
    {

    cout << "funzt";

    }

    wieso kann ich die beiden zeiger nicht miteinander vergleichen ???

    danke euch



  • strcmp
    oder
    std::string::operator==



  • Original erstellt von <ehmandu>:
    wieso kann ich die beiden zeiger nicht miteinander vergleichen ???

    Kannst du doch! -> Tutorial über Zeiger lesen...

    Vergleich von Zeigern != Vergleich der Inhalte



  • finde kein Zeiger Tutorial.....

    wie kann man jetzt Zeiger vergleichen ?????

    ich benutze ja eigentlich nur ein Zeiger....

    der zeiger char *nam = "hallo";

    hat ja gar keine Adresse..... der zeig einfach nur auf "hallo".....

    nur char *name = new char[10];

    zeigt auf eine Adresse bzw... auf 10 adressen.......

    komm einfach nicht weiter bitte helft mir

    DANKE





  • Hi,

    char   *VarOne = "Hallo";
    char   *VarTwo = new char[15];
    
        strcpy ( VarTwo, "Hallo" );
    
            if ( VarOne == VarTwo ) //beeeep!!! Hier wird nur die Addresse von
                                    //VarOne und VarTwo verglichen _nicht_ der Inhalt
    

    Soll heissen:

    Vergleichst du einfach 'PointerVar' mit 'PointerVar', so werden die Addressen
    dieser Zeiger verglichen. Saehe der o. Code so aus, wuerde die Bedingung 'true'
    liefern:

    char   *VarOne = "Hallo";
    char   *VarTwo = VarOne;
    
         if ( VarOne == VarTwo ) //true - da VarTwo auf selbige Addresse zeigt, wie
                                 //VarOne
    

    Willst du aber den Inhalt vergleichen, musst du das anders machen. Zwei
    Moeglichkeiten sind ja schon aufgezaehlt worden. Du koenntest es beispielsweise
    so machen:

    char   *VarOne = "Hallo";
    char   *VarTwo = new char[15];
    
        strcpy ( VarTwo, "Hallo" );
    
            if ( !strcmp ( VarOne, VarTwo ) ) //in unserem Beispiel == true, da
                                              //Inhalt gleich. Negation, da strcmp
                                              //0 im Falle von Gleichheit liefert
    

    mfg
    v R



  • Original erstellt von virtuell Realisticer:
    Vergleichst du einfach 'PointerVar' mit 'PointerVar', so werden die Addressen
    dieser Zeiger verglichen.

    kleine anmerkung:
    nicht die addressen der zeiger selber, sondern die addressen auf die die zeiger zeigen, werden miteinander verglichen 🙂



  • ok danke ...

    aber mir ist noch etwas unklar...

    char *nam = "hallo";

    hat doch gar keine adresse oder...... der zeiger zeigt einfach auf die zeigenfolge.......oder nicht ?????



  • Doch das ist es. Der Text wird an eine Addresse gelegt und der Zeiger zeigt auf
    diese.

    mfg
    v R



  • aha

    ok danke euch



  • gibt es einen grund, warum du das mit char* machst? diese typischen fehler die du gemacht hast, waeren bei string alle korrekt:

    #include<string>
    #include<iostream>
    using namespace std;
    int main(){
        const string nam("hallo");
        string name;
        name = "hallo"; //anything that might change name
    
        if(nam==name){
            cout<<"works"<<endl;
        }
    
        return 0;
    }
    


  • achte drauf dass du nicht son schmarn machst:

    char *name = new char[15];
    name = "hallo"; //FALSCH!
    

    Das geht so nicht! mache es wie virtuell Realisticer

    strcpy ( name, "Hallo" );
    

    du benutzt nähmlich einen pointer auf ein char array und keinen string wie er dir von string.h zur verfügung gestellt wird!
    *dasnurmalbetonenwollte*

    [ Dieser Beitrag wurde am 15.06.2003 um 14:59 Uhr von THE_FreaK editiert. ]



  • von string.h = cstring wird dir kein string zur verfuegung gestellt, den gibts nur in string.


Anmelden zum Antworten