stanlee Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 #include<stdlib.h> #include<stdio.h> void readParsedFile(FILE* f); int main(int argc, char* argv[]) { FILE *fp; readParsedFile(fp); return 0; } void readParsedFile(FILE *f) { char *filename; char str[100]; int length=80; printf("Enter filename->\n"); scanf("%s", &filename); fflush(stdin); f=fopen(filename,"r"); fgets(str,length,f); printf("%100s",str); getch(); fclose(f); } Μπορεί κάποιος να με βοηθήσει;; Μου βγάζει EAccessViolation with message 'Access violation at address 7C9112B4 Read of address 5C3A4322'.Δεν μπορώ να βρώ τι λάθως εχω κανει... θέλω να διαβαζω το αρχείο γραμμή-γραμμή. Το Αρχείο που διαβάζω εχει την εξής μορφή: MThd | Format=1 | # of Tracks=21 | Division=480 Track #0 ****************************************** Time Event 1: 1: 0 |Key Sig | C Major | |Tempo | BPM=132 | micros\quarter=451128 |End of track| Track #1 ****************************************** Time Event 2: 1: 0 |On Note | chan=10 | pitch=C 1 | vol=100 2: 0 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 3: 0 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 120 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 240 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 360 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 ... προτάσεις και λύσεις ευπρόσδεκτες. Ευχαριστώ.
THUKIS Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 να ρωτήσω κάτι ψιλό εκτός θέματος . Ποιά C να κατεβάσω διότι πέρασα ανοιχτό παναπιστήμιο για να δοκιμάζω τον κώδικα που γράφουμε ... thanx ....
stanlee Δημοσ. 9 Ιανουαρίου 2008 Μέλος Δημοσ. 9 Ιανουαρίου 2008 Στο ΤΕΙ δουλευουμε την BORLAND C++ BUILDER 6. Ειμαι ικανοποιημένος.
bokarinho Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 Το αρχείο αυτό: MThd | Format=1 | # of Tracks=21 | Division=480 Track #0 ****************************************** Time Event 1: 1: 0 |Key Sig | C Major | |Tempo | BPM=132 | micros\quarter=451128 |End of track| Track #1 ****************************************** Time Event 2: 1: 0 |On Note | chan=10 | pitch=C 1 | vol=100 2: 0 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 3: 0 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 120 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 240 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 360 |(Off) Note | chan=10 | pitch=c 1 |On Note | chan=10 | pitch=C 1 | vol=100 είναι το αρχείο που πρέπει να διαβάσεις; Και αν ναι πως θέλεις να το διαβάσεις; Εννοώ τι από όλο αυτό το αρχείο ανά γραμμή χρειάζεσαι να κρατήσεις για να δούμε τι θα κάνουμε. Επίσης με μία πρόχειρη ματιά στον κώδικα σου βλέπω πως στην scanf δεν χρειάζεται το & γιατί διαβάζεις string. Αλλά εγώ προτειμώ την fgets σε όλες τις περιπτώσεις ακόμα και σε αυτές που θέλουμε να διαβάζουμε από το stdin. Επίσης πρόσεξε γιατί διαβάζεις το πολύ 80 χαρακτήρες ενώ θέλεις να τυπώνονται 100 αν είδα καλά, κάπως τα έχεις μπλέξει.
Brolly Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 #include<stdlib.h>void readParsedFile(FILE *f) { char *filename; char str[100]; int length=80; printf("Enter filename->\n"); scanf("%s", &filename); fflush(stdin); f=fopen(filename,"r"); fgets(str,length,f) printf("%100s",str); getch(); fclose(f); } dokimase na diavaseis to onoma tou arxeiou etsi: scanf("%s",filename); kai gia na diavaseis ta periexomena tou arxeiou: f=fopen(filename,"r"); while(fgets(str,length,f)!=NULL) printf("%100s",str);
alkisg Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 Ένα πρόβλημα είναι εδώ: scanf("%s", &filename); επειδή δεν έχει δεσμευθεί μνήμη για το filename. Θα μπορούσες να έχεις char filename[255]; ή να κάνεις filename = malloc(255*sizeof(char));
Directx Δημοσ. 9 Ιανουαρίου 2008 Δημοσ. 9 Ιανουαρίου 2008 #include<stdlib.h>Μπορεί κάποιος να με βοηθήσει;; Μου βγάζει EAccessViolation with message 'Access violation at address 7C9112B4 Read of address 5C3A4322'.Δεν μπορώ να βρώ τι λάθως εχω κανει... Το κοίταξα στον C/C++ Builder 6 μιας και τον χρησιμοποιώ, για να διορθώσεις το λάθος μνήμης κάνε ότι σου είπε ο Alkisg. Επίσης, μια παρατήρηση, αν θέλεις το printf να εκτυπώνει μόνο τους 100 πρώτους χαρακτήρες του str όρισε το ως "%.100s".
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.