Обявления

Резултати от второ домашно

Re: Резултати от второ домашно

от Марина Краева -
Number of replies: 0

Здравей, Тодор,

Проблемът идва от ползването на strncpy. Поведението на тази функция е следното (взето например от тук):

No null-character is implicitly appended at the end of destination if source is longer than num. Thus, in this case, destination shall not be considered a null terminated C string (reading it as such would overflow).


Това значи, че на всяка дума от масива ти `words` ѝ липсва завършващата нула и навсякъде, където ползваш `strcmp` по-надолу, всъщност има шанс да достъпиш непозволена памет - т.е. получава се недефинирано поведение.

От там нататък нямаш гаранции в кои случаи и дали изобщо за някакъв вход програмата ще работи правилно. Това, което наблюдаваш, може да се обясни например така: когато пускаш кода само върху един пример, "изкарваш късмет" и в words си има нули, които те спасяват. Когато обаче минат няколко поредни теста, се преизползва същото място в паметта, там вече няма нули и `strcmp` решава, че низовете не са равни.


Поздрави,

Марина