SeeksTheMoon
11-04-2012, 21:49
kann mir jemand sagen, warum folgendes zwar eine Compilerwarnung erzeugt ("Format ist kein Zeichenkettenliteral, und keine Formatargumente"), aber funktioniert
fprintf(file, getenv("REMOTE_ADDR"));
und folgendes fehlerfrei kompiliert, auch "funktioniert", dabei aber einen segfault verursacht?
fprintf(file, "%s", getenv("REMOTE_ADDR"));
Der Witz ist auch, dass printf funktioniert. Das komplette Programm lautet wie folgt:
#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);
}
fprintf(file, getenv("REMOTE_ADDR"));
und folgendes fehlerfrei kompiliert, auch "funktioniert", dabei aber einen segfault verursacht?
fprintf(file, "%s", getenv("REMOTE_ADDR"));
Der Witz ist auch, dass printf funktioniert. Das komplette Programm lautet wie folgt:
#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);
}