C++ Wie viele Zeichen im Array?



  • Gegenfrage:

    char foo[50];  //Wieviel Zeichen sind jetzt im Array?
    
    foo[5] = 'X';  //Wieviel Zeichen sind jetzt im Array?
    foo[5] = 0;    //und wieviel jetzt?
    

    Die richtige Antwort bleibt wie oben:
    Es sind immer 50.



  • sunnshine schrieb:

    Belli: Das Array hat eine Größe von 50. Muss ja nicht heißen, das da auch
    50 Zeichen drin sind.

    Was glaubst Du, soll denn sonst drin sein?



  • Ich möchte einfach char arrays nutzen, um eine Zeile aus einer Datei mit read() einzulesen.
    Ich weiss, mann könnte das natürlich auch mit z.b. string.c_str() oder so
    machen, aber mit char arrays find ich es im aktuellen Fall besser, da ich
    auch bequemer auf den Index zugreifen kann. Im Endeffekt ist das alles
    Geschmackssache. 😉

    Fa Fuq.

    1. Bei read gibst du die Größe selbst an!

    2. Zeilen liest man so ein:

    std::string line;
    std::istream stream....;
    std::getline(stream, line);
    

    3. Indexzugriff:

    char arr[] = "Bla";
    std::string str = "Bla";
    arr[0];
    str[0];
    

    Kein Unterschied.

    Und das ganze ist keine Geschmackssache. Wer nicht ohne sehr guten Grund und vernünftig gekapselt rohe Arrays zur Darstellung von Strings benutzt, der schreibt schlechten Code.



  • 1. Bei read gibst du die Größe selbst an!

    Ich weiss, aber bei read muss man doch eine C-String als Parameter mitgeben.
    Naja egal. Ich mach das halt gerne mit char-arrays. 🤡

    Ist halt wie schon geschrieben, meistens Geschmacksache!



  • Und das ganze ist keine Geschmackssache. Wer nicht ohne sehr guten Grund und vernünftig gekapselt rohe Arrays zur Darstellung von Strings benutzt, der schreibt schlechten Code.

    Meistens benutze ich auch strings. Eigentlich fast immer. Hier aber halt nicht.
    Wüsste nicht, warum das jetzt sofort schlechter Code sei... 😕



  • sunnshine schrieb:

    Und das ganze ist keine Geschmackssache. Wer nicht ohne sehr guten Grund und vernünftig gekapselt rohe Arrays zur Darstellung von Strings benutzt, der schreibt schlechten Code.

    Meistens benutze ich auch strings. Eigentlich fast immer. Hier aber halt nicht.
    Wüsste nicht, warum das jetzt sofort schlechter Code sei... 😕

    Weil Du ihn selber nicht richtig verstehst und handeln kannst?



  • Weil Du ihn selber nicht richtig verstehst und handeln kannst?

    Was meinst du, soll ich nicht richtig verstanden haben?



  • Zum Beispiel, wieviel Zeichen in einem

    char arr[50];
    

    sind ...



  • Das man bei streams die länge mit gcount() ermitteln kann, weiss ich.
    Ich wollte mit meiner frage halt nur wissen, ob es einen Befehl gibt, um
    die anzahl Zeichen von normalen Arrays zu ermitteln.



  • Beantworte doch mal diese Fragen:

    Belli schrieb:

    Gegenfrage:

    char foo[50];  //Wieviel Zeichen sind jetzt im Array?
    
    foo[5] = 'X';  //Wieviel Zeichen sind jetzt im Array?
    foo[5] = 0;    //und wieviel jetzt?
    

    Die richtige Antwort bleibt wie oben:
    Es sind immer 50.

    und noch eine:

    foo[50] = 'P'; //wieviele nun?
    


  • Belli:

    char array[50];
    

    Das obige Array hat Platz für 50(49) Zeichen. Es sind aber keine 50 Zeichen
    drinn, wenn ich nur z.b. "Programm" einlese. Dann sind die ersten 8(9)Elemente
    belegt!



  • und was ist an zum Beispiel

    array[20]
    

    nachdem Du "Programm" eingelesen hast?



  • sunnshine schrieb:

    Das obige Array hat Platz für 50(49) Zeichen. Es sind aber keine 50 Zeichen
    drinn, wenn ich nur z.b. "Programm" einlese. Dann sind die ersten 8(9)Elemente
    belegt!

    nein. Es sind immer alle Elemente belegt. So etwas wie "leer" gibt es nicht.



  • Die richtige Antwort bleibt wie oben:
    Es sind immer 50.

    So gesehen schon. Aber ich meinte, wie viele "wirkliche Zeichen im Array" bis
    zur '\0' gespeichert sind.

    foo[5] = 'X'
    

    das bedeutet nur, das das 6.Element den Wert 'X' bekommt.



  • Ich weiß, was das bedeutet, die Frage war, wieviele Zeichen sind nun in dem Array?



  • nein. Es sind immer alle Elemente belegt. So etwas wie "leer" gibt es nicht.

    Ich weiss. Ich möchte aber nur die Anzahl der Zeichen ermitteln, die in das Array
    eingelesen/gespeichert wurden. Das ein Array nie wirklich leer ist, ist mir bewusst.



  • Ein Array ist immer so groß wie bei der Dekleration angegeben.

    char arr[50];
    strcpy(arr, "1");
    strcpy(arr, "12");
    strcpy(arr, "123");
    strcpy(arr, "1234");
    strcpy(arr, "12345");
    

    Das Array ist in jeder Zeile 50 Zeichen groß. Es ist halt dumm.

    Ein std::string bzw std::vector hingegen unterscheidet zwischen Größe und Kapazität.

    string str;
    str = "1";
    str = "12";
    str = "123";
    str = "1234";
    str = "12345";
    

    Immer so lang, wie der zugewiesene String. Ob das interne Array 5 oder 500 Zeichen lang ist - du musst es nicht wissen.

    Ich weiss. Ich möchte aber nur die Anzahl der Zeichen ermitteln, die in das Array
    eingelesen/gespeichert wurden. Das ein Array nie wirklich leer ist, ist mir bewusst.

    Das machst du mit gcount. Anders geht es nicht zuverlässig.
    Oder du nimmst eine std::vector, der macht es dir auch leichter.

    std::vector<char> buffer(50);
    std::cin.read(buffer.data(), 15);
    buffer.resize(std::cin.gecount());
    


  • sunnshine schrieb:

    Ich möchte aber nur die Anzahl der Zeichen ermitteln, die in das Array
    eingelesen/gespeichert wurden.

    Insgesamt? Nur beim letzten Einlese/Speicher - Vorgang?
    Deine Frage ist zu unpräzise.
    Ansonsten hängt das natürlich davon ab, auf welchem Weg Du einliest/speicherst. Die Anzahl kann nur Deine Einlese/Speicher - Funktion liefern.
    Wie Du nun (endlich) erklärst, weißt Du, dass das Array niemals leer ist, man kann also im Nachhinein nicht feststellen, wieviel Byte bei der letzten Veränderung in das Array geschrieben wurden.
    Nur die Funktion/Routine, die die Änderung durchführt, weiß das.



  • Das machst du mit gcount. Anders geht es nicht zuverlässig.
    Oder du nimmst eine std::vector, der macht es dir auch leichter.

    Endlich mal eine vernünftige antwort. Das mit gcount weiss ich. Ich hatte nur gehoft, das es sowas auch speziell für arrays gibt.

    //Beispiel
    
    int i;
    char test[50] = "Hallo";
    
    for(i = 0; test[i] != '\0'; i++)
        ;
    
    cout << i;
    

    In dem Fall wäre i 5. Ich wollte einfach nur wissen, ob es zur Ermittlung
    dieser Länge auch einen direkten Befehl gibt.



  • sunnshine schrieb:

    Ich wollte einfach nur wissen, ob es zur Ermittlung
    dieser Länge auch einen direkten Befehl gibt.

    Und die Antwort hast du bereits bekommen. Auch einen Hinweis, dass du die Antwort bereits bekommen hast, hast du schon bekommen.


Anmelden zum Antworten