C++ Wie viele Zeichen im Array?



  • Belli

    Das hast Du ja auch nicht gefragt. Deine Frage war, wieviel Zeichen in Deinem Array gespeichert sind, und das sind 50.

    Wieso 50?



  • Wegen:

    sunnshine schrieb:

    [...]

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50.



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



  • 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());
    

Anmelden zum Antworten