kann mir jemand sagen, warum folgendes zwar eine Compilerwarnung erzeugt ("Format ist kein Zeichenkettenliteral, und keine Formatargumente"), aber funktioniert
Code:
fprintf(file, getenv("REMOTE_ADDR"));
und folgendes fehlerfrei kompiliert, auch "funktioniert", dabei aber einen segfault verursacht?
Code:
fprintf(file, "%s", getenv("REMOTE_ADDR"));
Der Witz ist auch, dass printf funktioniert. Das komplette Programm lautet wie folgt:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
        // Client-IP ausgeben
        printf("Content-type: text/plain\n\n%s", getenv("REMOTE_ADDR"));

        // Falls '?test' als GET gelesen wird, speichere IP in Datei
        if(!strcmp(getenv("QUERY_STRING"),"test")) {
                FILE* file = fopen("/home/test/public_html/testip","w");
                if(file != NULL) {
                        //fprintf(file, "%s", getenv("REMOTE_ADDR")); // kaputt
                        fprintf(file, getenv("REMOTE_ADDR")); // klappt
                } else {
                        return(EXIT_FAILURE);
                }
                fclose(file);
        }
        return(EXIT_SUCCESS);
}