C++ Wie viele Zeichen im Array?
-
sunnshine schrieb:
Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese
ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie
viele zeichen aktuell im Array gespeichert sind.50
-
sunnshine schrieb:
Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese
ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie
viele zeichen aktuell im Array gespeichert sind.Es sind 50.
sunnshine schrieb:
Bitte jetzt nicht schreiben, das ich besser einen String nutzen soll. Strings
nutze ich im algemeinen ja auch, jedoch nutze ich ab und zu auch ein char array.Und mit welcher Begründung verwendest du im konkreten Fall ein char-Array? Ich sag ja nicht, dass char-Arrays nicht ihre Berechtigung haben, aber wenn du schon sagst, dass man dir nicht "nimm std::string" als Antwort geben soll, dann würd mich schon interessieren, wieso genau std::string deiner Meinung nach keine gute Antwort ist.

-
sunnshine schrieb:
Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie viele zeichen aktuell im Array gespeichert sind. Gibt es einen genauen Befehl dafür?
Sone hats dir schon gesagt.
-
Sone schrieb:
Belli schrieb:
In einem Array der Größe X sind immer X Elemente.
X'D

Von welchen Arrays redest du? In C++ gibt es verschiedene.
Da gibt es erstmal die sog. C-Arrays, oder auch echte Arrays:T foo[N]; // N muss zur Compile-Zeit feststehenDessen Größe ermittelst du durch
sizeof(foo) / sizeof(*foo).
Es gibt noch einen Trick mit einem Funktionstemplate:template<typename T, size_t N> constexpr size_t getSize(T (&)[N]) { return N; }Ersteres würde ich vermeiden, wenn man nen Fall von array-to-pointer-decay hat ... passiert Anfängern sicher mal.
Andere Lösung:
auto n = distance(begin(arr), end(arr));Kracht auch wenns keine Compilezeit-Konstante ist.
-
@Belli: 50 stimmt nicht, wenn der Name sagen wir mal aus 13 Zeichen besteht!
@dot: Wieso kommt ihr beide auf 50? Ihr wisst doch garnicht, aus wie vielen
Zeichen das eingegebene Wort besteht....aber wenn du schon sagst, dass man dir nicht "nimm std::string" als Antwort geben soll, dann würd mich schon interessieren, wieso genau std::string deiner Meinung nach keine gute Antwort ist.
Das wäre keine gute Antwort, da ich eine Frage über char Arrays gestellt
hab!

Spaß!!!
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.
-
sunnshine schrieb:
Wieso kommt ihr beide auf 50? Ihr wisst doch garnicht, aus wie vielen
Zeichen das eingegebene Wort besteht.Das hast Du ja auch nicht gefragt. Deine Frage war, wieviel Zeichen in Deinem Array gespeichert sind, und das sind 50.
-
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!