Avatar billede mxs Nybegynder
26. februar 2007 - 13:42 Der er 6 kommentarer og
1 løsning

Hvorfor buffer+(bufferSize-1) og ikke bare buffer+bufferSize?

Hej

Jeg sidder og læser lidt om streambuffer og hvordan man laver dem. Jeg er stødt på et eksempel, http://www.josuttis.com/libbook/io/outbuf3.hpp.html og kan ikke rigtig forstå hvorfor han sætter den til bufferSize-1. Eller lad mig sige, jeg kan godt se hvad det er den gør, men jeg ikke forstå hvorfor han ikke bare sætter den til buffer+bufferSize. Har det nogen optimerende indvirkning på programmet ofr ifølge bogen "the C++ standard", så fortæller den ikke noget om at man skal pege på det sidste element i bufferen.
Avatar billede segmose Nybegynder
26. februar 2007 - 14:26 #1
fordi!
buffer+bufferSize giver en byte forbi enden af array'et.
Sidste element i array'et er buffer[bufferSize-1] da vi går fra 0 til bufferSize-1 i index.

int buffer[2];
har 2 elementer
buffer[0] og buffer[1]
og ikke buffer[2].
Avatar billede mxs Nybegynder
26. februar 2007 - 14:30 #2
segmose, det forstår jeg godt, men det er jo pointerne jeg sætter, altså pptr() og epptr() (put pointer og endputpointer). Og jeg kan læse at når pptr() == epptr() er lige med hinanden så bliver underflow kaldt, hvor epptr() peger en forbi enden af arrayet. I mine øjne opdateres den sidste karakter også i bufferen.
Avatar billede mxs Nybegynder
26. februar 2007 - 14:32 #3
som jeg lige kan se det, sender man egentlig bare den sidste karakter med overflow, opdatere den i overflow i stedet for sputc(), men det kan jeg bare ikke se det smarte i, da jeg bedre kan se at man lader sputc gøre dette.
Avatar billede mxs Nybegynder
26. februar 2007 - 21:10 #4
Jeg må vel gå ud fra at dette er sådan at det skal se ud, dog lader jeg tråden stå åben så andre kan svare.
Avatar billede mxs Nybegynder
28. februar 2007 - 15:19 #5
segmose >> er det virkelig mig der ikke kan se det :D Eller skal man bare holde den standard her? Altså jeg ved jo godt at endpoint er bufferSize-1 i et almindelig NULL termineret C array, men jeg har vel blandet det sammen, og ikke troet at det var det samme i dette tilfælde, men den skal vel bare pege på bufferSize-1, og lade det op til overflow at opdatere det sidste karakter i arrayet og derefter flushe det.
Avatar billede mxs Nybegynder
28. februar 2007 - 15:39 #6
Det hele er lige gået op i en højere enhed for mig :) segmose, jeg må bare huske på (og genopfriske min C) fremover at den sidste indgang i et array er \0. Kast et svar.
Avatar billede segmose Nybegynder
01. marts 2007 - 09:27 #7
Ah, jeg viste ikke lige hvad det var du mente, men jeg er glad for at du nu har fundet meningen og kommet videre.
Sidste indgang i en char array er sædvanligvis et \0 som dermed gør det til en streng, i et int array er der ingen krav om et \0 sidst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester