Wpis z mikrobloga

#cpp #programowanie i może trochę #sieci
Mireczki, piszę program, który zawiera serwer na socketach. Do wysyłanych danych na początku często dodawane są zera - co może to powodować? Chcę wysłać:
'a' '#'
a wysyła się
'\0' 'a' '#' (ewentualnie dwa zera na początku)
metoda odpowiadająca za wysyłanie danych wygląda tak:
bool ClientSlot::send(string message)
{
if(write(clientSocketId, message.cstr(), message.length())<0)
{
return false;
}
else
return true;
}
sprawdzałem zawartość message.c
str() za pomocą gdb i jest taka jak powinna być.
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Wykop Mobilny (Android)
  • 0
@6502: Nie programuje w tym języku ale '\0' chyba jest po prostu zakończeniem cstringu. Nie jestem co do tego pewien ale może warto sprawdzić, czy to nie jest przyczyną.
  • Odpowiedz
@Likaox: to jest zakończeniem cstringa, pytanie tylko skąd się bierze na początku wysyłanej wiadomości. To też nie jest kwestia błędu po stronie klienta, bo sprawdzałem przez putty.
  • Odpowiedz
@Tenisista88: Teraz zauważyłem, że po prostu dodaje '\0' na początku i końcu (a powinno być tylko na końcu). Wiem, że mogę to bez problemu obsłużyć po stronie klienta, ale chcę wiedzieć skąd to się bierze.
  • Odpowiedz
@6502: Na chłopski rozum myślę że ten message.length() daje ci długość stringa bez zakoncznika, ale konwersja w cstr daje ci dodatkowo na końcu tablicy '\0'. Może jakiś efekt uboczny z tym związany. Ekspertem nie jestem.

Idę spać.
  • Odpowiedz
@6502: nie wiem o co pytasz.
Do odbioru używasz recv(...)? Tam nie ma znaku /0 na końcu.
Jak chcesz wyszukiwać w tym tekście, musisz go sobie sam dodać
Może program którym wysyłasz ci to dodaje? Albo odczujesz ten string do bufora *(buf+1), a wcześniej było tam /0?
  • Odpowiedz