Ich versuche, etwas Text im allgemeinen Protokollformat zu drucken.printf() - druckt falsche Reihenfolge. Works, wenn separat gedruckt
printf("%s - - [%s] %s %d %zu\n", ip, _time, row, statuscode, size);
Das Problem ist, dass die Reihenfolge alle durcheinander kommt. Die Ausgabe lautet:
200 1511 - - [20/Sep/2017:13:07:32 +0200] GET/HTTP/1.1
Ich denke (1511
) ist die ip
gedruckt zu werden. Ich weiß nicht warum.
Wenn ich drucke sie wie folgt aus:
printf("1. %s\n", ip);
printf("2. %s\n", _time);
printf("3. %s\n", row);
printf("4. %d\n", statuscode);
printf("5. %zu\n", size);
Es ist wie erwartet funktioniert:
1. 127.0.0.1
2. 20/Sep/2017:13:11:24 +0200
3. GET/HTTP/1.1
4. 200
5. 151
Es scheint, das Problem beginnt, wenn ich statuscode
aus irgendeinem Grund hinzuzufügen. Ich habe keine Ahnung warum. Jede Hilfe wird geschätzt. Hier
ist die Funktion, wo ich prinft() verwenden:
static void handlelogging(char* method, struct sockaddr_storage client_addr, size_t size, char* row, int statuscode) {
char* ip;
char _time[80];
struct tm *info;
time_t rawtime;
time(&rawtime);
info = localtime(&rawtime);
strftime(_time, 80,"%d/%b/%Y:%H:%M:%S %z", info)
ip = getip(client_addr);
//Print goes here, see above.
}
Als jemand sagte, es ein Problem mit dem IP-Variable sein könnte:
static char* getip(struct sockaddr_storage client_addr) {
char ipstr[20];
struct sockaddr_in *s;
s = (struct sockaddr_in *) &client_addr;
/**
* Converts network address (s) in the IPV_4 family into a string.
*/
return strdup(inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr));
}
Sind Sie sicher, dass die Datentypen übereinstimmen? Ansonsten haben Sie ein undefiniertes Verhalten. –
Bitte post [MCVE] (https://stackoverflow.com/help/mcve) – vasek
_Questions Debugging-Hilfe zu suchen (warum nicht dieser Code zu arbeiten?) Muss das gewünschte Verhalten umfasst, um ein bestimmtes Problem oder Fehler und den kürzesten Code erforderlich um es in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: a [MCVE] ._ –