wat is segmentation fault

K

krishna_1980

Guest
de volgende code geeft runtime-fout als "segmentation fault." waarom?

char * str;
fp = fopen ( "f1.txt", "r");
fgets (str, 10, fp);
puts (str);

maar de volgende code werkt ............................................ .....

char * str;
fp = fopen ( "f1.txt", "r");
fgets (str, 10, fp);
for (i = 0; i <10; i )
printf ( "% c", * (str i));

 
Ik weet veel over C , maar ik zag iets in hun functies:

Dit is een voorbeeld stelt voor de functie.
Code:* Zet voorbeeld: Hallo wereld!
* /

# include <stdio.h>int main ()

(

char string [] = "Hallo wereld!";

puts (string);

)

 
U verklaarde alleen de pointer naar een geheugen ruimte, maar niet declareren van een variabele om de lees-string, dat is het probleem op te slaan.Toegevoegd na 7 minuten:De segmentatie fout wordt veroorzaakt door het benaderen van het geheugen ruimte heet een segment dat niet mag worden benaderd vanuit een ander segment.

 
Hoi,

Het probleem is, is het nodig om het einde van de string strore "\ 0".

Terwijl het afdrukken van de 2e methode gebruikt, dwz gebruikmakend van lus, bent u precies afdrukken alleen het aantal tekens dat u lezen en afdrukken.Dit zal prima werken.Maar tijdens de eerste methode, zet (), die net drukt de snaar door het lezen van karakter voor karakter en zoeken naar einde van de string, dat wil zeggen '\ 0', die niet is opgeslagen in de string tijdens het lezen.Het is nodig om expliciet te slaan "EOS" end-of-string anders heb je de eerste methode gebruiken.

Kars

 
Ik denk dat string-constante automatisch beëindigd door '\ 0', dus ik denk dat het OK is.

 
Hoi,
Geweldig.is nodig om geheugen toe te wijzen voor "str" alvorens het te gebruiken.

Kars.

 
Nee, het geheugen voor de aanwijzer toegewezen, maar het was nooit geïnitialiseerd met het adres van een geldige char locatie.In dit geval, de waarden in het geheugen dat is toegewezen aan het is een waarde die een segmentatie fout veroorzaakt.

 

Welcome to EDABoard.com

Sponsor

Back
Top