какво е сегментацията на вина

K

krishna_1980

Guest
следния код дава грешка по време на изпълнение "сегментацията на вина". защо?

ул. Чар *;
КП = fopen ( "f1.txt", "R");
fgets (ул., 10, РП);
поставя (STR);

но следния код работи ............................................ .....

ул. Чар *;
КП = fopen ( "f1.txt", "R");
fgets (ул., 10, РП);
за (I = 0; I <10; I )
printf ( "% C", * (ул. I));

 
Не знам много за C , но аз видях нещо в своите функции:

Това е пример за поставя функция.
Код:* Поставя Например: Здравей, свят!
* /

# включват <stdio.h>Int основни ()

(

Чар низ [] = "Здравей, свят!";

поставя (низ);

)

 
Можете обявена само на показалеца на паметта, но не се декларира променлива да съхранява чете низ, който е проблем.Added след 7 минути:Сегментирането грешка е причинена от достъп до едно пространство в паметта нарича сегмент, който не е позволено да бъдат достъпни от някои други сегмент.

 
Здрасти,

Проблемът е, че той е длъжен да strore края на низ "\ 0".

Докато печат използване на 2-ри метод, т.е. използването на линия, вие сте точно печат само броя на знаците, които четат и печат.Това ще работи добре.Но по време на първия метод, слага (), която току-що отпечатва низ от четене характер по характер и гледам за края на низ, т.е. "\ 0", което не се съхранява в низа, докато четете.Той се изисква изрично магазин "ЕОС" в края на низ в противен случай ще трябва да използвате първия метод.

Карс

 
Мисля, че постоянен низ автоматично се прекратява с "\ 0", така че, мисля, че всичко е наред.

 
Здрасти,
Велик.той е длъжен да отдели памет за "ул." преди да го използвате.

Карс.

 
Не, паметта за показалеца бяха разпределени, но тя никога не е бил инициализира с адреса на валидно място знак.В този случай, стойностите в паметта, които бяха разпределени за това е стойност, която води до сегментиране грешка.

 

Welcome to EDABoard.com

Sponsor

Back
Top