Length()



  • habe probleme mit String :: Length()

    gets(Name.c_str());
    if(Name.Length() == 2)
    {
        //... Name ist also zwei zeichen lang
    }
    else
    {
        //... Name ist also grösser oder kleiner als zwei zeichen
    }
    

    das problem ist das hier immer die else anweisung ausgeführt wird obwohl "Name" zwei zeichen enthält! Versteh das nicht. 😕 😕



  • Du glaubst, dass Name zwei Zeichen enthält, wenn du mal den Debugger bemühst wirst du aber sehen, dass der String leer bzw. sein Inhalt unverändert ist.

    Du kannst c_str() nicht zum Zuweisen von Werten benutzen, das dient lediglich zum Auslesen des Stringinhaltes als char*. Für dein gets() braucht du also einen "echten" char*, anschliessend kannst du dessen Inhalt per '=' dem AnsiString zuweisen.



  • danke. irgendwie klappt es nun 🙄 🙂
    kann man den nicht auch die grösse eines char überprüfen? dan spar ich mir die sache mit dem zuweisen von char->AniString.



  • siehe strlen



  • Peter Danke! 🙂

    bei AnsiString gibts ja .Pos, wie krieg ich bei char raus ob ein zeichen vorhanden ist? 😕



  • habs mit

    if(strchr(Name,2) == "c")

    versucht. das klappt aber nicht? dann hab ich noch eine frage bezüglich einens char array. wie definiert man da nun richtig die grösse? wenn ich nun ein char array mit drei buchstaben fülle, müsste dies dann doch so aussehen?

    char Name[2];

    und nicht 3(!). da der index ja bei 0 anfängt. also wäre abc das drei zeichen hat, nun in char[2] so:

    a[0]
    b[1]
    c[2]

    oder sehe ich da was fallsch und man muss es doch anders machen?



  • Richtig wäre char name[4];.

    Char-Arrays sind Null-terminiert, haben also immer ein Zeichen mehr als sichtbar. Und wo man anfängt zu zählen (Index) ist doch schnurzegal; wenn ein String zwölf Zeichen lang sein soll (inkl. Terminierung) dann musst du auch Platz für zwölf Zeichen reservieren.

    Solche Fragen sollten aber nicht auftreten, wenn du mal ein C/C++-Grundlagen-Tutorial durcharbeiten würdest! 😉 Und wenn doch, dann gehören sie in's entsprechende Forum. Mit dem BCB/der VCL hat das nicht speziell zu tun.



  • Guck mal in die BCB-Hilfe zu strchr, da steht die genaue Anwendung beschrieben. Die Größe eines String-Arrays für z.B. 3 Buchstaben muß genau genommen so aussehen:

    char str[4];
    

    3 Stellen für die "Buchstaben" und noch eine zusätzliche Stelle für die abschließende NULL. Der Index 0-2 enthält dann Deine "Buchstaben" und Index 3 die abschließende NULL. gets hängt automatisch eine abschließende NULL an den eingegebenen String an (siehe BCB-Hilfe zu gets), Du mußt also dafür sorgen, daß genügend Speicher reserviert ist sonst gibts ne Schmutzverletzung 😉

    Hups, Jansen war flotter auf den Fingern 😃

    [ Dieser Beitrag wurde am 15.06.2003 um 14:36 Uhr von Peter editiert. ]



  • ok danke erstmal. nur eins noch. ist das dann nun ISO C++ Standard oder Borland spezifisch? also das man das array mit den chars+NULL initialisiert..



  • Es ist nicht Borland spezifisch !


Anmelden zum Antworten