Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

@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 μήπως και το κάνω έτσι τελικά...

post-284325-0-14366900-1456009325_thumb.png

Δημοσ.

Πρέπει να κανείς resize. Το reserve απλά κάνει ένα allocation. Το κανείς πχ όταν θες να κανείς πολλά pushback. Εσύ εδώ θες το resize ( που κάνει και reserve)

 

Το άλλο που σου ποσταρα είναι το iteratlr way. Κερδιζεις τρελό abstraction χάνεις επιδώσεις. Imo καλύτερα να έχεις raw buffer, δεν αξίζει το overhead για το παρών πρόβλημα.

Δημοσ.

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 Unicode
compare the use of U+001A as a control character to indicate the substitute function

 

Μάλλον διαβάζεις binary data εκεί που το πρόγραμμα ζητάει text.

Δημοσ.

Πρέπει να κανείς resize. Το reserve απλά κάνει ένα allocation. Το κανείς πχ όταν θες να κανείς πολλά pushback. Εσύ εδώ θες το resize ( που κάνει και reserve)

 

 

Αυτό.

Στον κώδικα που σου παρέθεσα άλλωστε είχε resize.

  • Moderators
Δημοσ.

Με resize δουλεύει! Στο parse έσκαγε γιατί έπρεπε να βάλω \0 στο τέλος του vector (αυξάνοντας το size του κατά 1). Υποθέτω με reserve δε δούλευε γιατί η PHYSFS_read, όντας C, δεν έκανε τις απαραίτητες αλλαγές στο vector και απλώς έγραφε στη μνήμη που της έδινα.

 

Μ2000, το -3 δεν ξέρω αν ήταν legit χαρακτήρας εκεί, το πιθανότερο όμως είναι να ήταν σκουπίδι, μιας και το parse προσπαθούσε να συνεχίσει το parsing και μετά το "κανονικό" τέλος των δεδομένων του αρχείου.

 

Σας ευχαριστώ όλους!

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...