// Solutions to "Richard Kaiser: C++ with Borland C++Builder", ISBN: 3540010270
// Copyright Richard Kaiser, 2004, All rights reserved
// oder doch besser weglassen ???

// Diese Funktionen werden in PointerU.cpp aufgerufen

// --------------- Aufgaben 3.12.14 ------------------------

// --------------- Aufgabe 1 -------------------------------

#include <cstdio>
void Aufgabe_3_12_14_1()
{
char c='A';
// a)
// int n1=strlen(&c);
// Der Speicher ab der Adresse &c wird bis zum nächsten
// Nullterminator durchsucht. Das kann zu einer Zugriffsverletzung
// führen.

const char* s="yodel doodle doo";
// b)
int n2=strlen(strstr(s,"doo")); // n2==10

char* t;
// c)
// int n3=strlen(strstr("doo",s));
// Da s kein Teilstring von "doo" ist, gibt strstr 0 zurück.
// Der Zugriff von strlen auf die Adresse 0 führt aber zu einer
// Zugriffsverletzung.

// d)
strcpy(t,s);
// An der Adresse t ist kein Speicher reserviert.
}


// --------------- Aufgabe 2 -------------------------------

// a)
char* cloneString(const char* s)
{
char* p=new char[strlen(s)+1];
strcpy(p,s);
return p;
}


void Aufgabe_3_12_14_2()
{
char* t="abc";
char* s1=t;
char* s2=cloneString(t);
// s1 und t zeigen beide auf denselben Speicherbereich.
// s2 und t zeigen auf verschiedene Speicherbereiche.


// b)
// Nach dem Aufruf dieser Funktion darf man den Aufruf von delete nicht
// vergessen.
}

