Hmm schade das sizeof nach der Übergabe an eine Funktion nicht mehr klappt. Ich hatte nämlich vor in meiner Funktion erstmal zu überprüfen ob die Parameter ausreichend dimensioniert sind damit meine Funktion kein undefiniertes Verhalten erzeugt.
Wie löse ich sowas dann? Ich möchte ein char* str prüfen ob darin z.B. 32 Zeichen Platz hätten. Muss ich dann die Länge vorher mit sizeof bestimmen und dann als zusätzlichen Parameter mit übergeben oder wie lösen die Profis sowas?
Die Profis nehmen oftmals Arrays eben wegen der vorgegebenen festen Größe nicht. (C89) Viele Programme sind parametrisierbar, da verbietet es sich dann.
Das gilt auch für lokale nichtstatische Arrays, die selbst bei geringer Dimensionierung gerne mal einen Stacküberlauf produzieren (natürlich immer erst unter Einsatzbedingungen und nicht etwa während der Entwicklung ).
Den Vorzug haben dynamische, d.h. bei Bedarf größenmäßig erweiterbare Datenstrukturen. Und hierfür hat man üblicherweise Eigenentwicklungen für die Kapselung von *alloc/free oder man verwendet, wenn man mit den Lizenzen klarkommt, praktisch erprobte Frameworks, z.B. glib.
Für deinen Fall, und wenn du auf Arrays verzichtest und dyn.Speicher übergibst und MSVC/MinGW verwendest, wäre z.B. möglich:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
#include <malloc.h>
#ifndef __int64
#error such dir was anderes
#endif
void f(char *s)
{ printf("%lu\n", _msize(s)); }
main() {
f(malloc(4711));
return 0;
}
Code:
1 2 3 4 5 6 7 8 9 10 11 12
#include <malloc.h>
#ifndef __int64
#error such dir was anderes
#endif
void f(char *s)
{ printf("%lu\n", _msize(s)); }
main() {
f(malloc(4711));
return 0;
}
Code:
1 2 3 4 5 6 7 8 9 10 11 12
#include <malloc.h>
#ifndef __int64
#error such dir was anderes
#endif
Macht es einen Unterschied ob ich char* str übergebe oder char atr[] ?
Nein. Nur das es knallt, wenn du ein sich hinter einem Zeiger versteckendes Array übergibst und in der Funktion dann versuchst, den Speicherbereich zu vergrößern.
_________________ Java, the best argument for Smalltalk since C++. -- Frank Winkler
Zuletzt bearbeitet von Wutz am 11:45:30 01.09.2010, insgesamt 1-mal bearbeitet
Dankeschön für die sehr ausführliche Erklärung. Ich werde dann mal was eigenes schreiben für die dynamische Speicherverwaltung, hier gab es ja auch einen guten Artikel wie man das macht. http://www.c-plusplus.de/forum/viewtopic-var-p-is-1463522.html
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.