socket- odbieranie i dziwne znaczki

0
       char tab[256];
       recv(sock, tab, sizeof(tab), 0);
       std::cout << tab;

Tekst, który odbieram nie ma 256 znaków i w resztę tablicy dostaję jakieś dziwne znaczki. Jak je usunąć?
Długość tego tekstu się zmienia, więc nie mogę zmniejszyć rozmiaru tablicy.

0

O stringach nie słyszał? Daj znak null jak skończysz wczytywanie i czytaj tablicę tylko do nulla

0

Słyszałem o stringach. Ale nie słyszałem aby można było jako drugi argument podać stringa.
Znalazłem rozwiązanie.

int ilebajtow;
char buf[256];
ilebajtow = recv(sock, tab, sizeof(tab), 0);
tab[ilebajtow] = NULL;
0

A jak ci wczyta dokładnie 256 bajtów to co? Segmentation fault?
Ja bym sprawdził najpierw ;)

0

Segmentation fault? To stos, nie sterta - tutaj segfaulta nie będzie, to raz. Dwa - zwykłe i (nie)groźne off-by-one, na stosie... przy odrobinie szczęścia pozwala zrobić coś, czego autor nie planował.

0

Gwoli wyjaśnienia jeszcze - segfault to będzie co najwyżej pośrednio, jeżeli naruszonym elementem będzie coś bezpośrednio związanego z operacjami na pamięci + będzie trochę szczęścia, samo takie wyjście poza stos nawet w przypadku brzegowym (bufor 'do' samego końca stosu) segfaulta nie da - stos rośnie w dół, więc 'graniczącym z pustką' obszarem jest pierwszy bajt bufora.

0
hck napisał(a)

Słyszałem o stringach. Ale nie słyszałem aby można było jako drugi argument podać stringa.
Znalazłem rozwiązanie.

int ilebajtow;
char buf[256];
ilebajtow = recv(sock, tab, sizeof(tab), 0);
tab[ilebajtow] = NULL;

chlopie, a widzial ty definicje NULL'a ze przypisuje do chara ?

btw.:

int ilebajtow;
char buf[256];
ilebajtow = recv(sock, tab, sizeof(tab)-1, 0);
if(ilebajtow>=0){
  tab[ilebajtow]=0; // albo '\0' ale zadne NULL, to ze ci kompilator bledu nie zwraca to inna sprawa.
  // ...
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1