Tjena jag har problem med att tömma en char buffer[256] som tar emot data via recv(); (winsock) Frågan är väl främst om du förstår vad en <b>char buffer[256]</b> är. Du har 256 heltal med värden mellan -128 och +127. Vad menar du med att tömma? Vill du sätta alla dessa heltal till 0? Räcker det med att sätta det första till 0? För du vill väl inte plocka bort alla talen? Det går nämligen inte... <b>>Du har 256 heltal med värden mellan -128 och +127</b> <b>Njaae... I allmänhet är char unsigned, och då har man tal mellan 0 och 255, alternativt tecken beroende på hur man tolkar, förstås.</b> Det som gäller "I allmänhet" är att char kan ta värden mellan 0 och 127. Sedan finns det två alternativ: att char även kan ta värden mellan 128 och 255 (unsigned) eller att char även kan ta värden mellan -128 och -1 (signed). Tack för kommentarerna, jag kom fram till att det enklaste sättet att lösa det på var: Det finns en färdig funktion:Tömma en char buffer[256]?
prövar srtcpy(buffer,""); men det funkar inte.. tar emot rätt text men fyller på med tidigare data??
om nån nu fattar vad jag skriver...
Tack på förhand...Sv: Tömma en char buffer[256]?
Sv:Tömma en char buffer[256]?
Njaae... I allmänhet är char unsigned, och då har man tal mellan 0 och 255, alternativt tecken beroende på hur man tolkar, förstås.
Vad gäller frågeställarens själva problem så misstänker jag att vad som händer är följande:
1. En buffer ligger och väntar. Det är en char-array, eller en c-sträng.
2. En c-sträng avslutas med tecknet '\0' (vilket motsvarar talet 0).
3. recv placerar bara ut en rad tecken.
4. Du läser in det som en sträng. Detta innebär att om det först stod "aaa\0", du sen får in 'b' så är det som står i bufferten 'baa\0', och det blir strängen.
Följande lösningar finns:
-Fyll hela bufferten med 0-or. Eftersom du ändå grötar runt i C så kan du köra med memset. Inte speciellt snyggt och relativt resurskrävande.
-Ta reda på hur mycket som är skickat, brukar man kunna få från recv, kalla det n. Sätt buffer[n]='\0', använd buffer som en vanlig sträng.
-Ta reda på hur mycket som är skickat, använd bara de n första tecknen, det kan man göra via strncpy, och övriga strn...-funktioner.Sv: Tömma en char buffer[256]?
<info>The char type is signed by default on some computers, but unsigned on others.</info>
http://www.crasseux.com/books/ctutorial/The-char-type.htmlSv: Tömma en char buffer[256]?
;-)Sv: Tömma en char buffer[256]?
for(int i=0; i < 256; i++)
{
buf[i] = '\0';
}
Sv: Tömma en char buffer[256]?
memset(buf, 0, 256);
Edit: http://www.cplusplus.com/reference/clibrary/cstring/memset.html