mrasp
22-05-2003, 14:17
Hallo.
Ich möchte einer Funktion zwei Pointer auf eine Datenstruktur übergeben. Der Inhalt dieser Datenstruktur soll in der Funktion verändert werden. Dabei werden wohl zwangsweise die Speicheradressen der Datenstrukturen geändert. Vom Hauptprogramm aus möchte ich dann auf die in der Funktion geänderten Datenstrukturen zugreifen.
Wenn man den unten abgedruckten C-Quellcode mit dem gcc übersetzt, bekommt man eine Fehlermeldung, mit dem g++ lässt er sich compilieren und das Programm läuft auch so wie es soll. Wie kann ich die Funktionalität mit reinem C und dem gcc erreichen?
Danke für eure Vorschläge.
Martin
/*
* Dateiname: test.c
*
* Funktionsweise:
* In main() wird für die Zeichenketten text und fehler Speicher
* allokiert und mit Zeichen gefüllt. Dann wird die Funktion RunTest
* aufgerufen, die die beiden Zeichenketten verändern soll. In main()
* sollen dann die in der Funktion RunTest geänderten Daten angezeigt
* werden.
*
* Compilieren: gcc -o test test.c (geht nicht)
* g++ -o test test.c (funktioniert fehlerlos)
*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int RunTest(int param, char *&output, char *&errmsg)
{
printf("RunTest(): output: %p %s\n", output, output);
printf("RunTest(): errmsg: %p %s\n", errmsg, errmsg);
output = (char *)realloc(output, 20);
errmsg = (char *)realloc(errmsg, 33);
strcpy(output, "In RunTest geändert");
strcpy(errmsg, "Fehler: Benutzer nicht gefunden!");
printf("RunTest(): output: %p %s\n", output, output);
printf("RunTest(): errmsg: %p %s\n", errmsg, errmsg);
return(1);
}
int main(int argc, char *argv[])
{
char *text;
char *fehler;
unsigned int erg = 0;
text = (char *)malloc(11);
fehler = (char *)malloc(1);
strcpy(text, "name;pfad;");
strcpy(fehler, "");
printf("main(): text: %p %s\n", text, text);
printf("main(): fehler: %p %s\n", fehler, fehler);
erg = RunTest(2, text, fehler);
printf("main(): Ergebnis von RunTest(): %d\n", erg);
printf("main(): text: %p %s\n", text, text);
printf("main(): fehler: %p %s\n", fehler, fehler);
free(text);
free(fehler);
return(0);
}
EDIT by anda_skoa: ich war mal so frei code tags einzufügen
Ich möchte einer Funktion zwei Pointer auf eine Datenstruktur übergeben. Der Inhalt dieser Datenstruktur soll in der Funktion verändert werden. Dabei werden wohl zwangsweise die Speicheradressen der Datenstrukturen geändert. Vom Hauptprogramm aus möchte ich dann auf die in der Funktion geänderten Datenstrukturen zugreifen.
Wenn man den unten abgedruckten C-Quellcode mit dem gcc übersetzt, bekommt man eine Fehlermeldung, mit dem g++ lässt er sich compilieren und das Programm läuft auch so wie es soll. Wie kann ich die Funktionalität mit reinem C und dem gcc erreichen?
Danke für eure Vorschläge.
Martin
/*
* Dateiname: test.c
*
* Funktionsweise:
* In main() wird für die Zeichenketten text und fehler Speicher
* allokiert und mit Zeichen gefüllt. Dann wird die Funktion RunTest
* aufgerufen, die die beiden Zeichenketten verändern soll. In main()
* sollen dann die in der Funktion RunTest geänderten Daten angezeigt
* werden.
*
* Compilieren: gcc -o test test.c (geht nicht)
* g++ -o test test.c (funktioniert fehlerlos)
*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int RunTest(int param, char *&output, char *&errmsg)
{
printf("RunTest(): output: %p %s\n", output, output);
printf("RunTest(): errmsg: %p %s\n", errmsg, errmsg);
output = (char *)realloc(output, 20);
errmsg = (char *)realloc(errmsg, 33);
strcpy(output, "In RunTest geändert");
strcpy(errmsg, "Fehler: Benutzer nicht gefunden!");
printf("RunTest(): output: %p %s\n", output, output);
printf("RunTest(): errmsg: %p %s\n", errmsg, errmsg);
return(1);
}
int main(int argc, char *argv[])
{
char *text;
char *fehler;
unsigned int erg = 0;
text = (char *)malloc(11);
fehler = (char *)malloc(1);
strcpy(text, "name;pfad;");
strcpy(fehler, "");
printf("main(): text: %p %s\n", text, text);
printf("main(): fehler: %p %s\n", fehler, fehler);
erg = RunTest(2, text, fehler);
printf("main(): Ergebnis von RunTest(): %d\n", erg);
printf("main(): text: %p %s\n", text, text);
printf("main(): fehler: %p %s\n", fehler, fehler);
free(text);
free(fehler);
return(0);
}
EDIT by anda_skoa: ich war mal so frei code tags einzufügen