Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;

}

wieso führt folgender code zum laufzeitfehler ?


int main()

{


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


}

ka...

aber delete schreibt man auf jedenfall so: del[e]te

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.

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;

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!!!

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

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;

}

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.