Hallo Sven!
Ich habe eine EXE Datei geschrieben, welche die Funktion einer CGI haben soll. Diese erzeugt ein Antwortdokument. Ich kann die Umgebungsvariablen, die mit GET übermittelt wurden nicht in eine andere Variable einfügen, da ich immer eine Fehlermeldung wegen des Speichers erhalte. Kann mir jemand da helfen?
Nur unter einer Bedingung: Du sagst uns, wie die Fehlermeldung lautet und von wem sie erzeugt wird (Compiler? Betriebssystem?). Das Hellsehen faellt mir heute ziemlich schwer, weil ich gestern zuviel getrunken habe.
Einstweilen helfen Dir hoffentlich folgende Anmerkungen an Deinem Code.
Bye, Calocybe
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char name[15], vorname[15], email[35], homepage[60], kommentar[500], send[30];
char content[1000];
char var[500];
char* string;
int z1,z3; //Zaehlervariablen
int cgi_header_printed = 0;
int translate();
int ausgabe();
void PrintCGIHeader();
int main() {
string = getenv("QUERY_STRING"); // Mit dieser Übergabe habe ich Speicherprobleme
/* Was genau heisst "Speicherprobleme" ? */
// strcpy(string, getenv("QUERY_STRING")); // Daten aus den Umgebungsvariablen werden gelesen
/* Erst pruefen, ob QUERY_STRING ueberhaupt vorhanden! */
if (!string) {
PrintCGIHeader();
printf("<HTML><BODY><H4>QUERY_STRING variable not available!</H4></BODY></HTML>\n");
return -1;
}
/* content[0]='\0'; ueberfluessig, weil gleich strcpy folgt */
strcpy(content, string); //Konvertierung von Zeiger Char auf Char /* Haeh? */
translate();
strcpy(name,var);
translate();
strcpy(vorname,var);
translate();
strcpy(email,var);
translate();
strcpy(homepage,var);
translate();
strcpy(kommentar,var);
translate();
strcpy(send,var);
ausgabe();
return 0;
}
int translate() {
z1 = 0;
z3 = 0;
var[0] = '\0';
while (content[z1] != 0) {
while (content[z1] != '=') { /* ACHTUNG! Geht ueber Stringende falls kein '=' vorhanden! */
z1++;
}
while (content[z1] != '&') { /* ACHTUNG! Geht ueber Stringende falls kein '&' vorhanden! */
var[z3] = content[z1];
z3++; z1++;
}
z3 = 0;
/* Hier muss erst die Ausgabe erfolgen, da sonst der eben in var[] gesicherte Wert ueberschrieben wird. */
}
return 0;
}
int ausgabe() {
PrintCGIHeader(); /* Erst ordentlichen CGI Header schreiben! */
printf("<html><head><title>Temporärest Gaestebuch</title></head>");
printf("<body>");
printf("%s\n",name);
printf("%s\n",vorname);
printf("%s\n",email);
printf("%s\n",homepage);
printf("%s\n",kommentar);
printf("</body></html>");
return 0;
}
void PrintCGIHeader() {
if (!cgi_header_printed) {
printf("Content-Type: text/html");
cgi_header_printed = 1;
}
}