mikä on Segmentation fault

K

krishna_1980

Guest
seuraava koodi on antaa ajonaikainen virhe "Segmentation fault". Miksi?

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

mutta seuraava koodi toimii ............................................ .....

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

 
I dont know paljon C , mutta olen nähnyt jotakin niiden tehtävät:

Tämä on esimerkki tuo toiminto.
Koodi:* Esittää esimerkin: Hello world!
* /

# include <stdio.h>int main ()

(

char string [] = "Hello world!";

puts (merkkijono);

)

 
Olet ilmoitettu vain osoitin muistia, mutta ei ilmoittanut muuttuja tallentaa lukea merkkijono, joka on ongelma.Lisätään 7 minuuttia:Segmentointi vika johtuu pääsy muistia kutsutaan segmentti, jota ei saa käyttää mistä muusta segmenttiin.

 
Hei,

Ongelmana on, on velvollinen strore loppuun merkkijono "\ 0".

Tulostettaessa käytetään 2. menetelmää, eli käyttämällä loop, olet juuri tulostus vain merkkien lukea ja tulostaa.Tämä toimii hyvin.Mutta vuoden ensimmäinen menetelmä, puts (), joka vain tulostaa merkkijonon lukemalla merkki kerrallaan ja etsiä vuoden jono, eli '\ 0', jota ei ole tallennettu merkkijonon lukemisen.Se on nimenomaan store "EOS" end-of-kielinen muuten joudut käyttämään ensimmäistä menetelmää.

Karsissa

 
Uskon string jatkuvasti automaattisesti purkaa '\ 0', niin mielestäni se on OK.

 
Hei,
Upea.on tarpeen jakaa muistin: STR ennen sen käyttöä.

Kars.

 
Ei, muistiin osoitin oli varattu, mutta sitä ei koskaan alustettu ja osoite voimassa char paikkaan.Tässä tapauksessa arvot muistiin, joka myönnettiin on arvo, joka aiheutti segmentointi virheen.

 

Welcome to EDABoard.com

Sponsor

Back
Top