C socket read - znak ETX na końcu

C socket read - znak ETX na końcu
  • Rejestracja: dni
  • Ostatnio: dni
0

Hej,

Odczytuję w C dane z socketa, dokładnie z serwera pop3.
Mam zadeklarowany bufor:

Kopiuj
char data[2048];
memset(data, '\0', sizeof(data)); 

Odczyt danych:

Kopiuj
rcvd = read((*sock), data, sizeof(data)); 

I teraz muszę podzielić to po nowych liniach, ponieważ jeśli linia zaczyna się kropką po której występuje jakikolwiek znak, to tzreba ją usunąć:

Kopiuj
tok = strtok_r(data, "\r", &save1);
        
        while(tok != NULL){
            
            if(strncmp(tok, "\n.\0", 3) == 0){
            
                end = 1;
                
            } else if(strncmp(tok, "\n.", 2) == 0){
            
                char data2[rcvd];
                memset(data2, "\0", sizeof(data2));
                memcpy(data2, tok+2, sizeof(data2));
                fprintf(fp, data2);
                fprintf(fp, "\n");
            
            } else {
            
                fprintf(fp, tok);
            
            }
            
            tok = strtok_r(NULL, "\r", &save1);
            if((tok == NULL && newLineAtEnd == 1) || (tok != NULL)){
                
                //fprintf(fp, "\n");
                
            }
        
        }
        
        memset(data, '\0', sizeof(data)); 

Problem mam w pierwszym else if, jeśli strtok pobrał ostatni element z bufora po podziale, to na końcu jest jeden randomowy znak, znak ETX, jeden randomowy znak. Nie mam pojęcia skąd to się bierze, ani jak się tego pozbyć. Any ideas? Będę mega wdzięczny ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

Taki strzał, bo za mało kodu podałeś.

Kopiuj
                memcpy(data2, tok+2, sizeof(data2));

zmień na
memcpy(data2, tok+2, sizeof(data2)-1);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.