bnvdarklord Δημοσ. 28 Μαΐου 2009 Δημοσ. 28 Μαΐου 2009 1) Στο πολύ απλό παράδειγμα > main() { int x; x = 10; cout << x << " on " << &x << endl; } που τυπώνει την θεση μνήμης του χ το αποτελεσμα ειναι παντα 0x22ff74 οσες φορές και να το τρέξω... Γιατι αποθηκευεται στην ιδια θέση συνέχεια?? 2) Στην εντολή fread εχουμε πχ fread(buffer, 1, sizeof(buffer), f1); το 1 τι ακριβώς ειναι(2ο ορισμα?) καπου βρήκα οτι ειναι ο αριθμός των byte που θα διαβαστουν η κατι τετοιο, αλλα δεν πολυκαταλαβα... τι θα αλλαξει αν το βαλω 2, 3, 4 κτλ?
georgemarios Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 1) χωρις να ειμαι σιγουρος, υποθετω εχει να κανει με το memory caching του λειτουργικου. Δοκιμασες να το ξανατρεξεις μετα απο ενα reboot? 2) fread >size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); ptr Pointer to a block of memory with a minimum size of (size*count) bytes. size Size in bytes of each element to be read. count Number of elements, each one with a size of size stream Pointer to a FILE object that specifies an input stream. δηλ, στον πινακα ptr αν ολα πανε καλα, θα αποθηκευτουν size*count bytes
bnvdarklord Δημοσ. 29 Μαΐου 2009 Μέλος Δημοσ. 29 Μαΐου 2009 1) και μετα το reboot η μνημη που αποθηεκευεται ειναι η ίδια 2) Στο fread οτι νουμερο και να βαλω στο count δεν αλλαζει τπτ...
bokarinho Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 1) και μετα το reboot η μνημη που αποθηεκευεται ειναι η ίδια 2) Στο fread οτι νουμερο και να βαλω στο count δεν αλλαζει τπτ... 1. Πολύ απλά δεν υπάρχει λόγος να αλλάζει. Η θέση μνήμης που βλέπεις είναι διεύθυνση μέσα στο virtual χώρο διευθύνσεων που έχει η διεργασία, δεν είναι η ακριβής διεύθυνση της μεταβλητής στη μνήμη του υπολογιστή. 2. Δεν καλείς την fread σωστά αρχικά και κατόπιν φυσικά και έχει σημασία το τι count βάζεις.
bnvdarklord Δημοσ. 29 Μαΐου 2009 Μέλος Δημοσ. 29 Μαΐου 2009 1) Η θεση μνήμης στην virtual καθορίζεται απο το compile δηλαδη και μενει σταθερη?? 2) Αν εννοείς οτι βαζω το 1 και το sizeof(buffer) ανάποδα, δουλευει και μετα δύο σωστά περιέργως... Και μηπως ξερεις τοτε τι νόημα εχει αμα δεν εχει σημασία τι count βαζω?
bokarinho Δημοσ. 29 Μαΐου 2009 Δημοσ. 29 Μαΐου 2009 1) Η θεση μνήμης στην virtual καθορίζεται απο το compile δηλαδη και μενει σταθερη?? 2) Αν εννοείς οτι βαζω το 1 και το sizeof(buffer) ανάποδα, δουλευει και μετα δύο σωστά περιέργως... Και μηπως ξερεις τοτε τι νόημα εχει αμα δεν εχει σημασία τι count βαζω? > #include <stdio.h> #include <stdlib.h> #include <string.h> /* Fread Example. */ char *ReadFromFile(char *Filename) { if(Filename) { FILE *f = NULL; static int Index = 0; static char Buffer[bUFSIZ] = ""; memset(Buffer, 0 , sizeof(Buffer)); if(!(f = fopen(Filename,"rt"))) return NULL; else { if(fread((char *)Buffer, sizeof(Buffer), 1, f) < 0) { if(ferror(f)) { fprintf(stderr,"Fread Error:%s\n", strerror(errno)); fclose(f); return NULL; } } else { fclose(f); return Buffer; } } } else { fprintf(stderr,"NULL filename.\n"); return NULL; } } /* Fread Example. */ char *ReadFromFileV2(char *Filename) { if(Filename) { FILE *f = NULL; static int Index = 0; char *Buffer = NULL; Buffer = calloc(BUFSIZ, sizeof(char)); if(!Buffer) return NULL; if(!(f = fopen(Filename,"rt"))) return NULL; else { if(fread((char *)Buffer, sizeof(Buffer), 1, f) < 0) { if(ferror(f)) { fprintf(stderr,"Fread Error:%s\n", strerror(errno)); fclose(f); return NULL; } } else { fclose(f); return Buffer; } } } else { fprintf(stderr,"NULL filename.\n"); return NULL; } } int main(int argc, char *argv[]) { char *Buf = NULL; char *Buf2 = NULL; Buf = ReadFromFile("test.txt"); Buf2 = ReadFromFileV2("test.txt"); printf("Buffer Contents:\n%s", Buf); printf("Buffer Contents from v2:\n%s", Buf2); printf("Hit enter to continue....\n"); getchar(); return 0; } Περιεχόμενα test.txt: This is a test file.And we will show how fread works. Εκτυπωμένα αποτελέσματα: Buffer Contents: This is a test file.And we will show how fread works. Buffer Contents from v2: ThisHit enter to continue.... Αναρρωτήσου που γίνεται το λάθος....
bnvdarklord Δημοσ. 31 Μαΐου 2009 Μέλος Δημοσ. 31 Μαΐου 2009 Mμμμ μερικά από αυτα που εχεις κάνει δεν τα εχω κανει, αλλα απο οτι κατάλαβα το V2 διαβάζει ως string και για αυτό σταματαει στο 1ο κενό?? Αλλα τι σχέση εχει αυτό με το τι κανει το count στην fread, και στις 2 εκδόσεις ειναι το ίδιο :s
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.