Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: MFC (Visual C++) ::  Problem mit Zeiger Convertierung     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
pincerepa
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.01.2012
Beiträge: 6
Beitrag pincerepa Mitglied 18:15:36 21.01.2012   Titel:   Problem mit Zeiger Convertierung            Zitieren

Das Programm soll Personen verwalten. In der Bibliothek ist die Struktur definiert. Die hier aufgeführte Unterfunktion(nur ein Ausschnitt) liest die Daten von der Tastatur ein und speichert sie in einem Hilfsfeld ab. Danach wird ein dynamisches Feld erzeugt, mit der Größe der eingegebenen Datensätze.
Mein Problem ist die Konvertierung der Zeiger: Der Kompiler spuckt andauernd char* kann nicht in int konvertiert werden.
Über Hilfe würde ich mich sehr freuen.

Bibliothek
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
typedef struct person_e {         // Etikett: Struktur Person
            ui_t  identNr;
            nam_t fNam, vNam;
            gd_t  gebDat;
            } person_t;

typedef person_t*  pperson_t;     // Typname: Zeiger auf Struktur
typedef pperson_t* ppperson_t;    // Typname: Zeiger auf Zeiger auf Struktur
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct person_e { // Etikett: Struktur Person
ui_t identNr;
nam_t fNam, vNam;
gd_t gebDat;
} person_t;

typedef person_t* pperson_t; // Typname: Zeiger auf Struktur
typedef pperson_t* ppperson_t; // Typname: Zeiger auf Zeiger auf Struktur
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct person_e {         // Etikett: Struktur Person
            ui_t  identNr;
            nam_t fNam, vNam;
            gd_t  gebDat;
            } person_t;

typedef person_t*  pperson_t;     // Typname: Zeiger auf Struktur
typedef pperson_t* ppperson_t;    // Typname: Zeiger auf Zeiger auf Struktur



Funktion Personenverwaltung
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
pperson_t person;
  int datenAnz;


pperson_t *pPerArr = {0};
  pPerArr = (char**) calloc (datenAnz, sizeof(char*));
 
  for(int j=0; j <= datenAnz; j++) {
    pPerArr[j] = person[j];
C/C++ Code:
1
2
3
4
5
6
7
8
9
pperson_t person;
int datenAnz;


pperson_t *pPerArr = {0};
pPerArr = (char**) calloc (datenAnz, sizeof(char*));

for(int j=0; j <= datenAnz; j++) {
pPerArr[j] = person[j];
C/C++ Code:
1
2
3
4
5
6
7
8
9
pperson_t person;
  int datenAnz;


pperson_t *pPerArr = {0};
  pPerArr = (char**) calloc (datenAnz, sizeof(char*));
 
  for(int j=0; j <= datenAnz; j++) {
    pPerArr[j] = person[j];
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
Beitrag Wutz Mitglied 19:46:26 21.01.2012   Titel:              Zitieren

Das Problem hat mit dem Forumstitel nichts zu tun.
Es ist eine reine C-Problematik.
C/C++ Code:
pperson_t *pPerArr = {0};
C/C++ Code:
pperson_t *pPerArr = {0};
C/C++ Code:
pperson_t *pPerArr = {0};

Ist schon mal sinnfrei, Zeiger initialisiert man
C/C++ Code:
pperson_t *pPerArr = NULL;
oder auch gleich
pperson_t *pPerArr = 0;
C/C++ Code:
pperson_t *pPerArr = NULL;
oder auch gleich
pperson_t *pPerArr = 0;
C/C++ Code:
pperson_t *pPerArr = NULL;
oder auch gleich
pperson_t *pPerArr = 0;

C/C++ Code:
pPerArr = (char**) calloc (datenAnz, sizeof(char*));
C/C++ Code:
pPerArr = (char**) calloc (datenAnz, sizeof(char*));
C/C++ Code:
pPerArr = (char**) calloc (datenAnz, sizeof(char*));

ist auch sinnfrei in Sinn von C, nur C++ler, die auf C Code nicht verzichten können, benutzen den Cast.
C/C++ Code:
pPerArr = calloc (datenAnz, sizeof *pPerArr );
C/C++ Code:
pPerArr = calloc (datenAnz, sizeof *pPerArr );
C/C++ Code:
pPerArr = calloc (datenAnz, sizeof *pPerArr );

z.B. reicht völlig aus.

C/C++ Code:
  for(int j=0; j <= datenAnz; j++) {
C/C++ Code:
for(int j=0; j <= datenAnz; j++) {
C/C++ Code:
  for(int j=0; j <= datenAnz; j++) {

Hier stimmt auch schon wieder was nicht, denn du läufst über die Grenzen hinaus, besser und portabler ist:
C/C++ Code:
int j;
for(j=0; j < datenAnz; j++) {
    pPerArr[j] = person[j];
C/C++ Code:
int j;
for(j=0; j < datenAnz; j++) {
pPerArr[j] = person[j];
C/C++ Code:
int j;
for(j=0; j < datenAnz; j++) {
    pPerArr[j] = person[j];

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler


Zuletzt bearbeitet von Wutz am 19:47:14 21.01.2012, insgesamt 1-mal bearbeitet
pincerepa
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.01.2012
Beiträge: 6
Beitrag pincerepa Mitglied 14:01:39 23.01.2012   Titel:              Zitieren

Vielen Dank erstmal für deine Antwort.
Wenn ich das so mache wie du sagst bekomme ich die Meldung:
Zitat:
error C2440: '=': 'void *' kann nicht in 'pperson_t *' konvertiert werden

Also so ähnlich wie vorher auch.
Und dann hatte ich noch eine weitere Meldung:
Zitat:
error C2228: Links von ".fNam" muss sich eine Klasse/Struktur/Union befinden. Typ ist 'pperson_t'

Diese Verschwindet wenn ich es wie folgt mache (Code mit der kompletten Funktion). Die obere Meldung jedoch bleibt:
Zitat:
error C2440: '=': 'void *' kann nicht in 'pperson_t' konvertiert werden


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pperson_t ReadPerFromKbd (void) {

  pperson_t person;
  int datenAnz;

  for(int i=0; i < 10; i++) {
    datenAnz = i;
    printf("Familiennamen: ");  fgets(person[i].fNam, NAMLEN+1, stdin);
    if(strlen(person[i].fNam) != 1) {
      printf("Vorname      : ");  fgets(person[i].vNam, NAMLEN+1, stdin);    
      printf("Geburt Tag   : ");  scanf_s("%u", &person[i].gebDat.gdTag);  
      printf("Geburt Monat : ");  scanf_s("%u", &person[i].gebDat.gdMonat);
      printf("Geburt Jahr  : ");  scanf_s("%u", &person[i].gebDat.gdJahr);
      printf("Personal-Nr. : ");  scanf_s("%u", &person[i].identNr);
    }//if
    else i=10;
  }//for
 
  pperson_t pPerArr = 0;
  pPerArr = calloc (datenAnz, sizeof pPerArr);
 
  for(int j=0; j < datenAnz; j++) {
    pPerArr[j] = person[j];
  }//for
 
}//ReadPerFromKbd
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pperson_t ReadPerFromKbd (void) {

pperson_t person;
int datenAnz;

for(int i=0; i < 10; i++) {
datenAnz = i;
printf("Familiennamen: "); fgets(person[i].fNam, NAMLEN+1, stdin);
if(strlen(person[i].fNam) != 1) {
printf("Vorname : "); fgets(person[i].vNam, NAMLEN+1, stdin);
printf("Geburt Tag : "); scanf_s("%u", &person[i].gebDat.gdTag);
printf("Geburt Monat : "); scanf_s("%u", &person[i].gebDat.gdMonat);
printf("Geburt Jahr : "); scanf_s("%u", &person[i].gebDat.gdJahr);
printf("Personal-Nr. : "); scanf_s("%u", &person[i].identNr);
}//if
else i=10;
}//for

pperson_t pPerArr = 0;
pPerArr = calloc (datenAnz, sizeof pPerArr);

for(int j=0; j < datenAnz; j++) {
pPerArr[j] = person[j];
}//for

}//ReadPerFromKbd
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pperson_t ReadPerFromKbd (void) {

  pperson_t person;
  int datenAnz;

  for(int i=0; i < 10; i++) {
    datenAnz = i;
    printf("Familiennamen: ");  fgets(person[i].fNam, NAMLEN+1, stdin);
    if(strlen(person[i].fNam) != 1) {
      printf("Vorname      : ");  fgets(person[i].vNam, NAMLEN+1, stdin);    
      printf("Geburt Tag   : ");  scanf_s("%u", &person[i].gebDat.gdTag);  
      printf("Geburt Monat : ");  scanf_s("%u", &person[i].gebDat.gdMonat);
      printf("Geburt Jahr  : ");  scanf_s("%u", &person[i].gebDat.gdJahr);
      printf("Personal-Nr. : ");  scanf_s("%u", &person[i].identNr);
    }//if
    else i=10;
  }//for
 
  pperson_t pPerArr = 0;
  pPerArr = calloc (datenAnz, sizeof pPerArr);
 
  for(int j=0; j < datenAnz; j++) {
    pPerArr[j] = person[j];
  }//for
 
}//ReadPerFromKbd


In der oberen for-Schleife brauchst du nichts zu korrigieren(außer da liegt das eigentliche Problem), da kommen wir schon selber hinter(ist aber vllt für den Zusammenhang wichtig). Aber für den Rest wärs echt cool. Und mit den Grenzen hattest du natürlich Recht.
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9600
Beitrag _matze Mitglied 14:37:37 23.01.2012   Titel:              Zitieren

pincerepa schrieb:

Wenn ich das so mache wie du sagst bekomme ich die Meldung:
Zitat:
error C2440: '=': 'void *' kann nicht in 'pperson_t *' konvertiert werden


Dann verwendest du den C++-Compiler, obwohl dein Code eigentlich ziemlich nach C aussieht. In dem Fall ist der Cast schon nötig. Wenn du bei reinem C bleiben willst, kannst du deine cpp-Datei einfach nach .c umbenennen (oder in den Projektsettings auf C-Compiler umschalten).

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
Beitrag Wutz Mitglied 16:00:54 23.01.2012   Titel:              Zitieren

Zitat:
C/C++ Code:
            ui_t  identNr;
            nam_t fNam, vNam;
            gd_t  gebDat;
C/C++ Code:
ui_t identNr;
nam_t fNam, vNam;
gd_t gebDat;
C/C++ Code:
            ui_t  identNr;
            nam_t fNam, vNam;
            gd_t  gebDat;

Diese Typnamen halte ich für dringend verbesserungswürdig.
Irgendjemand außer dir soll die Code ja vielleicht auch noch mal lesen und verstehen können ohne gleich einen größeren Vorrat Betablocker aufzubrauchen.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifdef __cplusplus
#error
Ich übersetze C Code mit einem C++ Compiler, was Anfängerschrott ist
#endif


pperson_t ReadPerFromKbd (void) {

  person_t person[10]; /* ein temporäres 10er Array zum Einlesen der Daten */
  pperson_t pPerArr = 0; /* Definition eines Zeigers mit NULL-Initialisierung */
  int datenAnz,i;

  for(datenAnz=i=0; i < 10; i++,datenAnz++) {
    printf("Familiennamen: ");  fgets(person[i].fNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
    if(strlen(person[i].fNam) != 1) {
      printf("Vorname      : ");  fgets(person[i].vNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
      printf("Geburt Tag   : ");  scanf("%u", &person[i].gebDat.gdTag);  
      printf("Geburt Monat : ");  scanf("%u", &person[i].gebDat.gdMonat);
      printf("Geburt Jahr  : ");  scanf("%u", &person[i].gebDat.gdJahr);
      printf("Personal-Nr. : ");  scanf("%u", &person[i].identNr);
    }
  }
 
  pPerArr = calloc (datenAnz, sizeof *pPerArr); /* '*' hast du hier entfernt, ohne zu wissen warum; */
 
  for(i=0; i < datenAnz; i++) {
    pPerArr[i] = person[i]; /* hier werden die StrukturelementINHALTE in den vorbereiteten calloc-Speicherplatz kopiert */
  }

  return pPerArr;  /* return hast du auch noch vergessen */
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifdef __cplusplus
#error
Ich übersetze C Code mit einem C++ Compiler, was Anfängerschrott ist
#endif


pperson_t ReadPerFromKbd (void) {

person_t person[10]; /* ein temporäres 10er Array zum Einlesen der Daten */
pperson_t pPerArr = 0; /* Definition eines Zeigers mit NULL-Initialisierung */
int datenAnz,i;

for(datenAnz=i=0; i < 10; i++,datenAnz++) {
printf("Familiennamen: "); fgets(person[i].fNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
if(strlen(person[i].fNam) != 1) {
printf("Vorname : "); fgets(person[i].vNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
printf("Geburt Tag : "); scanf("%u", &person[i].gebDat.gdTag);
printf("Geburt Monat : "); scanf("%u", &person[i].gebDat.gdMonat);
printf("Geburt Jahr : "); scanf("%u", &person[i].gebDat.gdJahr);
printf("Personal-Nr. : "); scanf("%u", &person[i].identNr);
}
}

pPerArr = calloc (datenAnz, sizeof *pPerArr); /* '*' hast du hier entfernt, ohne zu wissen warum; */

for(i=0; i < datenAnz; i++) {
pPerArr[i] = person[i]; /* hier werden die StrukturelementINHALTE in den vorbereiteten calloc-Speicherplatz kopiert */
}

return pPerArr; /* return hast du auch noch vergessen */
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifdef __cplusplus
#error
Ich übersetze C Code mit einem C++ Compiler, was Anfängerschrott ist
#endif


pperson_t ReadPerFromKbd (void) {

  person_t person[10]; /* ein temporäres 10er Array zum Einlesen der Daten */
  pperson_t pPerArr = 0; /* Definition eines Zeigers mit NULL-Initialisierung */
  int datenAnz,i;

  for(datenAnz=i=0; i < 10; i++,datenAnz++) {
    printf("Familiennamen: ");  fgets(person[i].fNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
    if(strlen(person[i].fNam) != 1) {
      printf("Vorname      : ");  fgets(person[i].vNam, NAMLEN+1, stdin); /* evtl. vorhandenes abschließendes '\n' muss hier noch entfernt werden... */
      printf("Geburt Tag   : ");  scanf("%u", &person[i].gebDat.gdTag);  
      printf("Geburt Monat : ");  scanf("%u", &person[i].gebDat.gdMonat);
      printf("Geburt Jahr  : ");  scanf("%u", &person[i].gebDat.gdJahr);
      printf("Personal-Nr. : ");  scanf("%u", &person[i].identNr);
    }
  }
 
  pPerArr = calloc (datenAnz, sizeof *pPerArr); /* '*' hast du hier entfernt, ohne zu wissen warum; */
 
  for(i=0; i < datenAnz; i++) {
    pPerArr[i] = person[i]; /* hier werden die StrukturelementINHALTE in den vorbereiteten calloc-Speicherplatz kopiert */
  }

  return pPerArr;  /* return hast du auch noch vergessen */
}

Eine robuste Eingabepufferlöschung für DAU-Eingaben fehlt natürlich noch.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler


Zuletzt bearbeitet von Wutz am 16:35:30 23.01.2012, insgesamt 1-mal bearbeitet
pincerepa
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.01.2012
Beiträge: 6
Beitrag pincerepa Mitglied 21:05:08 23.01.2012   Titel:              Zitieren

Hey,

@_matze: Der Cast hat geholfen. Danke:)

@Wutz: Die Typnamen sind so vorgegeben. Wir arbeiten mit VisualStudio2008 und machen da eine CLR-Konsolenanwendung unter C++. Es ist also ein C++ Compiler. Wir sollen aber trotzdem C programmieren. Mein Professor meinte das C auch komplett unter C++ funktioniert.

Das ich das return vergessen hatte war mir auch schon aufgefallen :). Und vielen Dank für die anderen Tipps.
pincerepa
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.01.2012
Beiträge: 6
Beitrag pincerepa Mitglied 21:17:05 23.01.2012   Titel:              Zitieren

Wenn ich die Funktion jetzt aufrufe kommen folgende Fehlermeldungen mit welchen ich nun wirklich gar nix mehr anfangen kann.

C/C++ Code:
error LNK2028: Nicht aufgelöstes Token (0A00000F) ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird.
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)".
C/C++ Code:
error LNK2028: Nicht aufgelöstes Token (0A00000F) ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird.
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)".
C/C++ Code:
error LNK2028: Nicht aufgelöstes Token (0A00000F) ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird.
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""struct person_e * __cdecl ReadPerFromKbd(void)" (?ReadPerFromKbd@@$$FYAPAUperson_e@@XZ)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)".
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
Beitrag Wutz Mitglied 22:32:39 23.01.2012   Titel:              Zitieren

pincerepa schrieb:
Mein Professor meinte das C auch komplett unter C++ funktioniert.

Das ist kompletter Blödsinn. C ist eine Schnittmenge mit C++ keine Untermenge von, und dass das so ist hast du selbst erfahren.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
merano
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.12.2006
Beiträge: 231
Beitrag merano Mitglied 01:35:22 26.01.2012   Titel:              Zitieren

pincerepa schrieb:
Wenn ich die Funktion jetzt aufrufe kommen folgende Fehlermeldungen mit welchen ich nun wirklich gar nix mehr anfangen kann.


Der Compiler mit person_e auch nicht ...


Zuletzt bearbeitet von merano am 01:35:38 26.01.2012, insgesamt 1-mal bearbeitet
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9600
Beitrag _matze Mitglied 10:14:56 26.01.2012   Titel:              Zitieren

merano schrieb:
pincerepa schrieb:
Wenn ich die Funktion jetzt aufrufe kommen folgende Fehlermeldungen mit welchen ich nun wirklich gar nix mehr anfangen kann.


Der Compiler mit person_e auch nicht ...


Der Compiler hat mit person_e kein Problem. Es ist der Linker, der meckert. Da fehlt die Definition.

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
C/C++ Forum :: MFC (Visual C++) ::  Problem mit Zeiger Convertierung   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.