sizeof von string hinter pointer?



  • Hallo!

    Wie bekomme ich die Größe eines Strings raus, wenn ich nur den Pointer kenne?
    strlen(ptr_string) gibt mir die korrekte stringlänge zurück, aber sizeof(ptr_string) gibt immer nur 4 zurück...

    char cstring[11];
    char *ptr_string=cstring;



  • sizeof gibt dir hier ja auch nur die Größe des Pointers zurück, und der ist auf 32-Bit Systemen so gut wie immer 4 Byte groß.
    Benutz doch einfach strlen, wo ist das Problem?



  • Hallo

    Beantwortest du die Frage nicht selber?

    chrische



  • nee ihr habt mich falsch verstanden...

    ich habe einen String, auf diesen lese ich mit scanf was ein. danach übergebe ich diesen als zeiger an eine funktion. in dieser soll geprüft werden ob die eingabe länger als der definierte string ist. wenn die eingabe länger war als 10 zeichen (string ist hier 10+1) dann muss die Eingabe wiederholt werden, sonst schiest der string ja im speicher drüber hinaus.

    if(strlen(ptr_string) > sizeof(ptr_string)) ...



  • spooky schrieb:

    nee ihr habt mich falsch verstanden...

    ich habe einen String, auf diesen lese ich mit scanf was ein. danach übergebe ich diesen als zeiger an eine funktion. in dieser soll geprüft werden ob die eingabe länger als der definierte string ist. wenn die eingabe länger war als 10 zeichen (string ist hier 10+1) dann muss die Eingabe wiederholt werden, sonst schiest der string ja im speicher drüber hinaus.

    if(strlen(ptr_string) > sizeof(ptr_string)) ...

    Dir ist schon klar, dass das Kind zu diesem Zeitpunkt längst in den Brunnen gefallen ist, oder?



  • und wie kann man es besser machen?



  • wenn du mit scanf() einen String einliest und der eingegebene String größer ist, als der Speicher, der zur Verfügung steht, "schießt" du schon beim einlesen darüber hinaus.

    Du willst sicher fgets()

    Greetz, Swordfish



  • Hallo

    Da du im C++-Forum schreibst, solltest du einfach std::string benutzen.

    chrische



  • yup, danke swordfish



  • chrische5 schrieb:

    Da du im C++-Forum schreibst, solltest du einfach std::string benutzen.

    Jo, schon, wenn er schon eine Frage hat, welche auf C-Strings abziehlt darf man ihm doch auch im C++-Forum helfen...

    Greetz, Swordfish



  • Hallo

    Swordfish schrieb:

    chrische5 schrieb:

    Da du im C++-Forum schreibst, solltest du einfach std::string benutzen.

    Jo, schon, wenn er schon eine Frage hat, welche auf C-Strings abziehlt darf man ihm doch auch im C++-Forum helfen...

    Greetz, Swordfish

    Na klar. Ich habe erst seine Frage nich verstanden und habe aus seinem ersten Post nur herauslesen könne, dass er sich die Frage eigentlich selber beantwortet und dann wollte ich ihn darauf hinweisen, dass es bei c++ std::string gibt. Das sollte nur eine Information sein und nicht bedeuten, dass es sich mit seiner Frage ins c-forum verpissen soll, weil ihm hier keiner antwortet.

    chrische



  • In C++ wollen wir:

    #include <iostream>
    
    int main()
    {
      char str[ 10 ];
    
      std::cout << "Namen eingeben: ";
      std::cin >> std::width( 10 ) >> str;
    };
    


  • Hallo

    Und warum nicht einfach:

    #include <iostream>
    #include <string>
    
    int main()
    {
    std::string Name;
    std::cout<<"Bitte Namen eingeben"<<std::endl;
    std::cin>>Name;
    
    }
    

    chrische



  • Dann ist die Eingabe aber nicht begrenzt und vllt. will er ja gar keine längere Eingabe oder es ist gar keine längere möglich. Da müsst man jetzt schon wissen was genau gewollt ist um zu wissen was besser ist.



  • Hallo

    Ne so nicht! schrieb:

    Dann ist die Eingabe aber nicht begrenzt und vllt. will er ja gar keine längere Eingabe oder es ist gar keine längere möglich. Da müsst man jetzt schon wissen was genau gewollt ist um zu wissen was besser ist.

    Es wäre allerdings kein Problem die Eingabe nun auf Länge zu testen.

    chrische


Anmelden zum Antworten