jtsc21 Δημοσ. 21 Απριλίου 2009 Δημοσ. 21 Απριλίου 2009 Γεια σας παιδια.Απο αυτους τους 2 κωδικες ο πρωτος λειτουργει κανονικα και ο δευτερος βγαζει Segmentation Fault. Η εισοδος που δινω(με ανακατευθυνση) ειναι 7 τυχαιοι χαρακτηρες.Η μονη διαφορα στους 2 κωδικες ειναι η 5η σειρα του κωδικα Υποψιαζομαι περιπου για πιο λογο συμβαινει αλλα θα ηθελα και αλλη μια γνωμη thanx in advance > #include <stdio.h> int main(void) {FILE* fp; fp=fopen("text.txt","r"); char buf[8]; fgets(buf,8,fp); printf(buf); printf("\n"); fclose(fp); } > #include <stdio.h> int main(void) {FILE* fp; fp=fopen("text.txt","r"); [b] char *buf;[/b] fgets(buf,8,fp); printf(buf); printf("\n"); fclose(fp); }
Directx Δημοσ. 21 Απριλίου 2009 Δημοσ. 21 Απριλίου 2009 Δεν έχεις δεσμεύσει στο char *buf σου την απαραίτητη μνήμη (8 bytes) οπότε το fgets γράφει σε ένα τυχαίο σημείο του προγράμματος (που δείχνει ο un-initialized char pointer) με αποτέλεσμα Segmentation fault. Δοκίμασε κάτι σε στυλ: > char *buf = (char*)malloc(8);
jtsc21 Δημοσ. 21 Απριλίου 2009 Μέλος Δημοσ. 21 Απριλίου 2009 ναι ομως στο παρακατω κομματι κωδικα γιατι δε βγαζει λαθος?? > #include <stdio.h> int main(void) {char *str; str="dsfasdfasdfasdfasdfasdfs"; printf(str); }
pinball_elf Δημοσ. 21 Απριλίου 2009 Δημοσ. 21 Απριλίου 2009 Στο τελευταίο παράδειγμα η str απλά δέιχνει στη θέση τη μνήμης που καταλαμβάνει η σταθερά "dsfasdfasdfasdfasdfasdfs".
Directx Δημοσ. 21 Απριλίου 2009 Δημοσ. 21 Απριλίου 2009 ναι ομως στο παρακατω κομματι κωδικα γιατι δε βγαζει λαθος?? > #include <stdio.h> int main(void) {char *str; str="dsfasdfasdfasdfasdfasdfs"; printf(str); } Για τον λόγο που σου εξήγησε ο pinball_elf.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.