InternetReadFile liest zuviele Zeichen
-
Hallo,
ich habe ein simples PHP Script auf nem Webserver mit folgendem Code:<?php echo (date("G:i:s")); ?>Dieses Script gibt mir die aktuelle Uhrzeit aus.
Jetzt will ich das mein Programm die Uhrzeit von dem Server "zieht":int main() { HINTERNET inet,hFile; char *ptr=NULL,*p=NULL; int err,available,bytes; inet = InternetOpen("MyOwnProgram",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); hFile = InternetOpenUrl(inet,"Meinserver.de\script.php",NULL,0,0,0); InternetQueryDataAvailable(hFile,&available,0,0); ptr = malloc(available); memset(ptr,0,sizeof(ptr)); do { Sleep(100); err = InternetReadFile(hFile,ptr,available,&bytes); if(bytes == 0) break; }while(err == TRUE); printf("Uhrzeit: %s\n",ptr); free(ptr); ptr = NULL; return 0; }Das Programm gibt mir die korrekte Uhrzeit aus nur sind dahinter viele ²²²²²²²:
16:36:24²²²²
Wie kriege ich den die ganzen ²²²² Weg?
-
Ok habe das ganze jetzt mal so probiert und so klappt es:
int main() { HINTERNET inet,hFile; char *ptr=NULL,buf[512],*p=NULL,time[24]; int err,available,bytes,len,i; memset(time,0,sizeof(time)); inet = InternetOpen("MyOwnProgram",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); hFile = InternetOpenUrl(inet,"Meinserver.de\script.php",NULL,0,0,0); InternetQueryDataAvailable(hFile,&available,0,0); ptr = malloc(available); if(ptr) { do { Sleep(100); err = InternetReadFile(hFile,ptr,available,&bytes); if(bytes == 0) break; }while(err == TRUE); strncpy(time,ptr,available); printf("Uhrzeit: %s\n",time); free(ptr); ptr = NULL; } return 0; }Aber kann mir jemand sagen warum mein 1 Anlauf verkehrt war?
-
Hi,
InternetReadFile setzt keine Null-Terminierung. Statt dem strncpy hättest Du auch einfach:
ptr[available-1] = 0;verwenden können (performanter).
Kann aber sein, dass Du Dir Deine Uhrzeit damit vorher "abschneidest", weil Du schon bei malloc nicht genug Speicher für die Null-Terminierung reservierst (habs gerade nicht ausprobiert und die Beschreibung von InternetReadFile deutet eher auf "\0 wird nicht beachtet" hin). Also gönn' Dir ggfs. noch ein Element mehr
.