Sven Wagener: (C/C++) Übergabe der Umgebungsvariablen in C Funktioniert nicht

Beitrag lesen

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;
    }
}

Danke Schonmal!
Ich habe Keine Probleme mit dem Compiler, der Übersetzt wie wild. dafür aber Probleme mit dem Betriebsystem:

GUESTBOOK verursachte einen Fehler durch eine ungültige Seite
in Modul GUESTBOOK.EXE bei 015f:0040133b.
Register:
EAX=00000000 CS=015f EIP=0040133b EFLGS=00010246
EBX=00540000 SS=0167 ESP=0064fde8 EBP=0064fdf8
ECX=00000000 DS=0167 ESI=81659d50 FS=4ccf
EDX=7efefeff ES=0167 EDI=00415d48 GS=0000
Bytes bei CS:EIP:
8b 01 03 d0 83 f0 ff 33 c2 8b 11 83 c1 04 a9 00
Stapelwerte:
00000000 0040105e 00415d48 00000000 0064fe38 00403465 00000001 00770390 007703f0 00000000 81659d50 00540000 c0000005 0064ff68 0064fe0c 0064fc18

Ich denke, dass diess an der Übergabe des Wertes der  Variable liegt. Der Debugger hält nähmlich Dort an!