Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hallo,

ich mache eigentlich schon ziemlich lange c++

habe aber trotzdem eine ziemliche noob frage :-).

normalerweise würde ich auch eine stringklasse benutzen aber unser lehrer

hat sie nicht mehr alle...

wieso führt folgender code zum laufzeitfehler ?


int main()

{

  char *test = new char[100];

  test = "hallo";


  delete[] test; //führt zum fehler


  return 0;

}

Geschrieben

Durch die Zuweisung

test = "hallo"

"verbiegst" du deinen Zeiger auf die Adresse des Stringliterals "hallo". Er zeigt damit nicht mehr auf den Speicher, den du mit new geholt hast.

Das nachfolgende delete bekommt also die Adresse des Literals, und das kann nicht mit delete freigegeben werden.

Benutz strcpy, oder besser gleich std::string.

Geschrieben

zum Thema benutz std::string

ich sagte unser lehrer hat nicht mehr alle an der waffel, das dürfen wir nicht benutzen.

aber strcpy darf ich verwenden danke @klotzkopp

aber wie kann ich ein char array befüllen das ich mit new

erstellt habe ausser miti


char *test = new char[100];

test[0] = 'A';

delete[] test;

Geschrieben

ich glaube wir reden aneinander vorbei

das ist ein schulprojekt und

wir sollen keine klassen verwenden!!!

also auch nicht die klasse string es gibt ne handvoll ausnahmen die

wir benutzen dürfen

ifstream, ofstream...

aber string gehört nicht dazu!!!

Geschrieben

ich weiss das strcpy keine klasse ist ich wüsste nur

gerne wie ich selbst so etwas umsetzen könnte.

aber das ist jetzt auch egal weil ich einfach strcpy benutze :-)

danke an alle die mir so schnell geholfen haben

Geschrieben
ich weiss das strcpy keine klasse ist ich wüsste nur

gerne wie ich selbst so etwas umsetzen könnte.

Eine simple Implementierung ohne jede Form der Optimierung (ausser denen, die der Compiler vornimmt) und ohne Sicherheitscheck gegen ein Überschreiten von Buffergrenzen wäre z.B.:


void MyStringCopy(char *dest, const char *src)

{

	int i=0;

	while(src[i]!=0)

	{

		dest[i]=src[i];

		i++;

	}

	dest[i]=0;

}

Mit einer Begrenzung auf eine maximale Stringlänge anhand der Größe des Ausgabepuffers könnte es z.B. so aussehen:

void MyStringCopy2(char *dest, const char *src, const int DestinationBufferSize)

{

	int i=0;

	const int max = (DestinationBufferSize / sizeof(char)) - 1;

	while(src[i]!=0 && i<max)

	{

		dest[i]=src[i];

		i++;

	}

	dest[i]=0;

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...