Hi Wenn ich ein Array eröffne mit unsigned char Array[5][5]; ist das dann 5x5 oder 6x6 groß, d.h. wird 0 mitgerechnet?
:
Verschoben durch Admin
C64 schrieb: > Hi > > Wenn ich ein Array eröffne mit ... ^^^^^^^ Definieren heisst das, nicht eröffnen.
Bei C++ : array[5] --> 0-4 also insgesamt 5 Elemente haben Platz Bei VB : array(5) --> 0-5 hier haben insgesamt 6 Elemente Platz Das ist ein wesentlicher Unterschied :-) Gruß, Willi
1 | char str[]="Hallo"; |
wird 5+1 lang, da ein string am Ende mit 0 bzw. dem Zeichen '\0' gekennzeichnet wird. Da ist die Array-Size dann 6. Rückwärts muss man dies beachten, wenn man Strings in Arrays schreiben will. VG, /th.
Die werden auch String-Arrays genannt, obwohl es in C und C++ keinen eigenen Datentyp "string" gibt. Das mit der \0 zum Schluss hat einen guten Grund. Es gibt einen ganzen Haufen String-Funktionen in C und C++ (string.h), die sich nach der 0 am Schluss orientieren. Beispiel: "strlen". Das nur so zur Ergänzung. lg, willi
In VB gibts aber auch die Möglichkeit, array(x TO y) zu schreiben, dann sieht man, welche Indizes möglich sind; Also array(5) = array(0 TO 5)
Willi S. schrieb: > Die werden auch String-Arrays genannt, obwohl es in C und C++ keinen > eigenen Datentyp "string" gibt. Das mit der \0 zum Schluss hat einen > guten Grund. Es gibt einen ganzen Haufen String-Funktionen in C und C++ > (string.h), die sich nach der 0 am Schluss orientieren. Beispiel: > "strlen". > Das nur so zur Ergänzung. > > lg, > willi Mh zumindest in C++ gibts strings ;)
Christopher D. schrieb:
> Mh zumindest in C++ gibts strings ;)
Leider aber nicht als Daten-Typ. Der ist erst bei C# eingeführt. C++
(speziell MFC) liefert "nur" CString als Klasse.
Christoph Pelich schrieb: > Christopher D. schrieb: > >> Mh zumindest in C++ gibts strings ;) > > Leider aber nicht als Daten-Typ. Doch. std::string Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch verwendet werden. Wenn du std::string schon nicht kennst, werden dir die Augen übergehen, was du sonst noch so alles in der STL verfügbar hast :-)
Karl heinz Buchegger schrieb: > Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch > verwendet werden. Nichts sollte verwendet werden, nur weil es da ist. Warte mal ab, was fuer ein Zeug sie noch in C++ stopfen...
Peter Stegemann schrieb: > Karl heinz Buchegger schrieb: > >> Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch >> verwendet werden. > > Nichts sollte verwendet werden, nur weil es da ist. In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse' kann man trotzdem aber nur auf die in der STL vorhandene std::string verweisen. Sie ist Bestandteil von C++, ob es einem nun passt oder nicht und somit ist die Behauptung einfach nur falsch und zeugt nicht gerade vom Wissen darüber, was in C++ alles vorhanden ist und was nicht.
Karl heinz Buchegger schrieb: > In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse' > kann man trotzdem aber nur auf die in der STL vorhandene std::string > verweisen. Dem Teil habe ich ja auch nicht widersprochen, sondern dem danach.
Peter Stegemann schrieb: > Karl heinz Buchegger schrieb: > >> In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse' >> kann man trotzdem aber nur auf die in der STL vorhandene std::string >> verweisen. > > Dem Teil habe ich ja auch nicht widersprochen, sondern dem danach. Dann habe ich dich missverstanden Hintergrund: man hört immer wieder die Aussage, dass std::string und Konsorten nicht zu C++ gehören, weil die ja in einer STL (igitt) residieren und damit nicht zur Sprache gehören. Und das ist ganz einfach Unsinn. Mit der gleichen Argumentation könnte man auch sagen, dass strcpy nicht zu C gehört, weil es ja schliesslich nicht in der Syntax verankert ist. Oft kann man std::string nicht benutzen. Sei es, weil man ein altes Programm pflegen muss oder sich an ein bestimmtes Framework anpassen muss oder Schwierigkeiten mit Multithreading hat. Meistens sind es einfach nur historische Gründe, warum man mit std::string nicht weiterkommt. Wenn man aber diese Zwänge nicht hat, spricht nichts gegen std::string. Immer noch besser, als wenn sich Lieschen Müller selbst die x-te Stringklasse baut.
Karl heinz Buchegger schrieb: > Hintergrund: man hört immer wieder die Aussage, dass std::string und > Konsorten nicht zu C++ gehören, weil die ja in einer STL (igitt) > residieren und damit nicht zur Sprache gehören. Und das ist ganz einfach > Unsinn. Mit der gleichen Argumentation könnte man auch sagen, dass > strcpy nicht zu C gehört, weil es ja schliesslich nicht in der Syntax > verankert ist. Stimmt. Den beiden ist gemeinsam, dass man sie sehr gut von der eigentlichen Sprache trennen kann. Und das ist das Schoene an C und C++ und das macht sie so geeignet fuer viele Platformen. Der Overhead, den man mitschleppen muss, ist extrem klein. > Wenn man aber diese Zwänge nicht hat, spricht nichts gegen > std::string. Immer noch besser, als wenn sich Lieschen Müller selbst die > x-te Stringklasse baut. Doch sicher gibt es genuegend Gruende fuer so eine Entscheidung. Aber es ist wohl muessig, das hier zu diskutieren. Das hatten wir schon und das fuehrt leider zu gar nichts.
> Meistens sind es einfach nur historische Gründe, warum man mit > std::string nicht weiterkommt. std::string hat irgendein compilerspezifisches Encoding und ist in der Regel nicht unicode-geeignet. std::wstring ist das teilweise, solange man die Strings nicht von irgendwo lesen oder irgendwo hinschreiben will. Dann hat man nämlich auch das Problem, daß man zwischen irgendeinem compilerspezifischen Encoding und dem externen Encoding konvertieren muß. Das ist mit standard-C++ dann recht umständlich und wird längst nicht von allen Compilern vernünftig unterstüzt. Die Namen der Encodings sind dann dazu auch noch compilerspzifisch, und eine Liste der verfügbaren Encodings kann man in standard-C++ auch nicht ermitteln. Mit einer Kombination aus std::wstring und iconv kann man aber einigermaßen arbeiten. Allerdings ist std::wstring nicht gerade sonderlich komfortabel. Deshalb gibt es wohl so viele APIs, die ihre eigene String-Klasse mitliefern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.