@savole

Что выведется на экран после выполнения этого фрагмента программы?

Здрасвуйте заранее спасибо.У меня такая проблема,немогли бы мне объяснить что выведется на экран после выполнения этого фрагмента программы:
char s1[]="слово";
scar *s2=new char[5];
strncpy(s2,s1,3);
puts(s2);
  • Вопрос задан
  • 2350 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Выведутся три символа "сло", и, возможно, что-нибудь после них, что именно -- непредсказуемо.
Потому что strncpy копирует не более n (3) символов из исходной строки (s1) в конечную (s2), и если исходная строка длиннее 3 символов, strncpy не добавляет закрывающий символ с кодом 0. Поэтому в s2 попадёт "сло", а дальше останется мусор, который был в памяти, и puts выведет весь этот мусор до первого символа с кодом 0.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mva
@mva
CEO, CTO, Lua/Gentoo/IPv6 Pioneer
Не согласен с предыдущим оратором.
Потому как вывод зависит от "ввода" :) Т.е от того, в какой кодировке слово "слово" записано в исходнике. Потому что, если это двухбайтная кодировка (юникод), то будет скопировано (следовательно, и выведено) только три БАЙТА (но не символа). Таким образом, это будет "с" и половинка от "л" (которая превратится в replacement символ) :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы