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

συναρτηση fgets() στη C


jtsc21

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

Δημοσ.

Γεια σας παιδια.Απο αυτους τους 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);
}

Δημοσ.

Δεν έχεις δεσμεύσει στο char *buf σου την απαραίτητη μνήμη (8 bytes) οπότε το fgets γράφει σε ένα τυχαίο σημείο του προγράμματος (που δείχνει ο un-initialized char pointer) με αποτέλεσμα Segmentation fault.

 

Δοκίμασε κάτι σε στυλ:

 

>
char *buf = (char*)malloc(8);

Δημοσ.

ναι ομως στο παρακατω κομματι κωδικα γιατι δε βγαζει λαθος??:rolleyes:

>
#include <stdio.h>
int main(void)
{char *str;
str="dsfasdfasdfasdfasdfasdfs";
printf(str);
}

Δημοσ.
ναι ομως στο παρακατω κομματι κωδικα γιατι δε βγαζει λαθος??:rolleyes:

>
#include <stdio.h>
int main(void)
{char *str;
str="dsfasdfasdfasdfasdfasdfs";
printf(str);
}

 

Για τον λόγο που σου εξήγησε ο pinball_elf.

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

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

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