Moderators Kercyn Δημοσ. 21 Φεβρουαρίου 2016 Μέλος Moderators Δημοσ. 21 Φεβρουαρίου 2016 @defacer Ναι έχεις δίκιο, πρέπει να το βγάλω. @Μ2000 Το std::vector έχει 2 "μήκη", το size και το capacity. Το size δείχνει πόσα στοιχεία έχει μέσα το vector, το capacity το για πόσα στοιχεία έχει γίνει allocate μνήμη. Δεν είναι θέμα "διαβάσματος", μιας και όπως δείχνει η εικόνα που επισυνάπτω, τα περιεχόμενα του αρχείου υπάρχουν στο vector. @παπι Δεν πολυκαταλαβαίνω τι κάνει αυτό. Χρησιμοποιεί το std::back_inserter για να βάλει ένα-ένα στοιχεία στο vector; Πώς ακριβώς μπορώ να το χρησιμοποιήσω, δεδομένου ότι δε μπορώ να αλλάξω την PHYSFS_read. Διαβάζω για το back_inserter τώρα για να καταλάβω καλύτερα... Βάζω την εικόνα από ένα τρέξιμο. Όπως μπορείτε να δείτε, στο RawData υπάρχουν τα περιεχόμενα του αρχείου, το size όμως είναι 0. Να πω εδώ ότι όταν πάω να κάνω parse (χρησιμοποιώντας το rapidxml) τότε μου σκάει (βρίσκει έναν χαρακτήρα -3 στο τέλος που δεν του αρέσει). Αν αντί για vectors βάλω ένα char[5000], τότε ο 615ος χαρακτήρας είναι ο 10 (\n) και όχι -3 όπως με το vector. Θα ρίξω μια ματιά στο basic_string μήπως και το κάνω έτσι τελικά...
παπι Δημοσ. 21 Φεβρουαρίου 2016 Δημοσ. 21 Φεβρουαρίου 2016 Πρέπει να κανείς resize. Το reserve απλά κάνει ένα allocation. Το κανείς πχ όταν θες να κανείς πολλά pushback. Εσύ εδώ θες το resize ( που κάνει και reserve) Το άλλο που σου ποσταρα είναι το iteratlr way. Κερδιζεις τρελό abstraction χάνεις επιδώσεις. Imo καλύτερα να έχεις raw buffer, δεν αξίζει το overhead για το παρών πρόβλημα.
M2000 Δημοσ. 21 Φεβρουαρίου 2016 Δημοσ. 21 Φεβρουαρίου 2016 To -3 που παίρνεις μάλλον είναι αυτό: http://www.fileformat.info/info/unicode/char/0fffd/index.htm used to replace an incoming character whose value is unknown or unrepresentable in Unicodecompare the use of U+001A as a control character to indicate the substitute function Μάλλον διαβάζεις binary data εκεί που το πρόγραμμα ζητάει text.
moukoublen Δημοσ. 21 Φεβρουαρίου 2016 Δημοσ. 21 Φεβρουαρίου 2016 Πρέπει να κανείς resize. Το reserve απλά κάνει ένα allocation. Το κανείς πχ όταν θες να κανείς πολλά pushback. Εσύ εδώ θες το resize ( που κάνει και reserve) Αυτό. Στον κώδικα που σου παρέθεσα άλλωστε είχε resize.
Moderators Kercyn Δημοσ. 21 Φεβρουαρίου 2016 Μέλος Moderators Δημοσ. 21 Φεβρουαρίου 2016 Με resize δουλεύει! Στο parse έσκαγε γιατί έπρεπε να βάλω \0 στο τέλος του vector (αυξάνοντας το size του κατά 1). Υποθέτω με reserve δε δούλευε γιατί η PHYSFS_read, όντας C, δεν έκανε τις απαραίτητες αλλαγές στο vector και απλώς έγραφε στη μνήμη που της έδινα. Μ2000, το -3 δεν ξέρω αν ήταν legit χαρακτήρας εκεί, το πιθανότερο όμως είναι να ήταν σκουπίδι, μιας και το parse προσπαθούσε να συνεχίσει το parsing και μετά το "κανονικό" τέλος των δεδομένων του αρχείου. Σας ευχαριστώ όλους! 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα