hi !
die von dir erwähnten sachen sind keine eigenarten von C gegenüber C++. Im Gegensatz zu C hat C++ Klassen, die gewisse Funktionalität kapseln - z.B. eine Stringklasse mit überladenem "+" und "=" Operator - deshalb ist da eine einfache Zuweisung von strings möglich. Intern führt die Klasse dann eine Speicheralokierung durch. (beim destruktor der klasse wird der spiecher wieder freigegeben).
die Zuweisung zum char* funktioniert natürlich - du brachst dazu keine "strcpy"-Funktion. Es wird allerdings nicht der string zugewiesen (d.h. kopiert), sondern die Speicheradresse, an der die Zeichenkette gespeichert ist. Dieser Speicher ist in deinem Fall am Stack, da er lokal angelegt wird, da in einer Funktion vereinbart. Nach der verlassen der Funktion wird der Speicher freigegeben, du hast jedoch noch einen Zeiger, der darauf verweist. Beim nächsten Zugriff darauf hättest du unter Windows eine memory-exception.
Was der TI macht, weiß ich nicht - ist aber sicher nicht die feine art.
Zitat:
Wenn ich aber char erg[15]; schreibe, dann gibts keine Probleme.
|
s.o.
wenn du eine zeichenkette speicher willst, musst du auf jeden fall "char erg[15]" schreiben - wenn die zeichenkette nicht länger als 14 (!) Zeichen ist (+ ASCII Null).
vorteil von maloc ist, dass du dynamisch zur laufzeit die größe des alokierten Speichers bestimmen kannst.
Zitat:
Wenn man static weglässt, so beschwert sich der Compiler auch nicht. Aber ich schätze mal, dass das static schon wichtig ist!?
|
Bei static wird die variable am heap angelegt, also beim Verlassen der Fu. nicht freigegeben.
Zitat:
Ich meinte damit, dass man in C++ sich das Allokieren von kleinen Daten sparen kann
|
was meinst du damit ?
was sind "kleine daten" ?
Zitat:
Aber ich bin eh schon froh dass es C fürn TI gibt, früher wurde fürn TI alles mit Assembler geschrieben!!! Da schreibt man mal 1 Seite nur um den String "Hallo Welt" auszugeben!
|
hab assembler nur am pc programmiert - stimmt, dauert recht lange, da was zu machen.
fg
-hannes