C++/CGI: Dummer Fehler



  • Ich muss blind sein: wieso stürzt das Programm in der Schleife des Ctors ab?

    #include <iostream>
    
    using namespace std;
    
    class MyCGI {
    
        private:
            string env[22];
    
        public:
            MyCGI();
            ~MyCGI();
    
    };
    
    MyCGI::MyCGI() {
    
        char *envName[22] = {
            "AUTH_TYPE", "CONTENT_LENGTH", "CONTENT_TYPE",
            "GATEWAY_INTERFACE", "HTTP_ACCEPT", "HTTP_CONNECTION",
            "HTTP_HOST", "HTTP_REFERER", "HTTP_USER_AGENT",
            "PATH_INFO", "PATH_TRANSLATET", "QUERY_STRING",
            "REMOTE_ADDR", "REMOTE_HOST", "REMOTE_IDENT",
            "REMOTE_USER", "REQUEST_METHOD", "SCRIPT_NAME",
            "SERVER_NAME", "SERVER_PORT", "SERVER_PROTOCOL",
            "SERVER_SOFTWARE"
        };
    
        for(int i = 0; i < sizeof(envName) / sizeof(*envName); i++) {
            env[i] = getenv(envName[i]); // Bumm!!!!!!!!!!!!!!!!!!!!!!!!!!
            cout << env[i] << '\n';
        }
    
        cout << "Env-Beispiel: " << env[3] << '\n';
    }
    
    MyCGI::~MyCGI() {
    }
    
    int main(int argc, char *argv[]) {
        cout << "Content-Type: text/html\n\n";
        MyCGI CGIInst;
        return 0;
    }
    

  • Administrator

    http://www.cplusplus.com/reference/clibrary/cstdlib/getenv/

    Return Value
    A null-terminated string with the value of the requested environment variable, or NULL if that environment variable does not exist.

    Also machst du dann:

    char const* p = 0;
    std::string str(p);
    

    Garantiertes undefiniertes Verhalten 😉

    Du musst einfach zuerst den Fehlerfall abfangen.

    Grüssli



  • Danke das wars!


Anmelden zum Antworten