i'm having trouble reading socket. code i'm using below, works fine, @ other times, prints unreadable characters, or random readable ones... there better way?
char* answer = (char*) malloc(1024); int answerlength = 0; char prevchar = 0; char newchar = 0; while (answerlength < 1024 && read(sock, &newchar, 1) > 0 ) { if (newchar == '\n' && prevchar == '\r') { break; } printf("%d\n", answerlength); answer[ answerlength ] = newchar; answerlength++; prevchar = newchar; } printf("%s\n", answer);
strings in c must null-terminated, means must have symbol \0
last character.
since don't guarantee happen anywhere in code, answer
may padded memory garbage next data read.
to make sure won't happen, use:
answer[answerlength] = '\0'; printf("%s\n", answer);
also, read()
whole thing straight answer
, don't need pointless loop:
int len; while (len = read(sock, &answer[answerlength], 1024 - answerlength)) answerlength += len; answer[answerlength] = '\0'; printf("%s\n", answer);