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

Πρόβλημα με ανάγνωση .txt αρχειων σε C


stanlee

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

Δημοσ.

#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'.Δεν μπορώ να βρώ τι λάθως εχω κανει...:mad:

 

θέλω να διαβαζω το αρχείο γραμμή-γραμμή.

 

Το Αρχείο που διαβάζω εχει την εξής μορφή:

 

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

...

 

προτάσεις και λύσεις ευπρόσδεκτες.

Ευχαριστώ.

Δημοσ.

να ρωτήσω κάτι ψιλό εκτός θέματος . Ποιά C να κατεβάσω διότι πέρασα ανοιχτό παναπιστήμιο για να δοκιμάζω τον κώδικα που γράφουμε ...

 

thanx ....

Δημοσ.

Το αρχείο αυτό:

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 αν είδα καλά, κάπως τα έχεις μπλέξει.

Δημοσ.
#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);

Δημοσ.

Ένα πρόβλημα είναι εδώ:

scanf("%s", &filename);

 

επειδή δεν έχει δεσμευθεί μνήμη για το filename.

 

Θα μπορούσες να έχεις

char filename[255];

ή να κάνεις filename = malloc(255*sizeof(char));

Δημοσ.
#include<stdlib.h>

Μπορεί κάποιος να με βοηθήσει;; Μου βγάζει EAccessViolation with message 'Access violation at address 7C9112B4 Read of address 5C3A4322'.Δεν μπορώ να βρώ τι λάθως εχω κανει...:mad:

 

Το κοίταξα στον C/C++ Builder 6 μιας και τον χρησιμοποιώ, για να διορθώσεις το λάθος μνήμης κάνε ότι σου είπε ο Alkisg.

 

Επίσης, μια παρατήρηση, αν θέλεις το printf να εκτυπώνει μόνο τους 100 πρώτους χαρακτήρες του str όρισε το ως "%.100s".

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...