Почему strcpy работает, когда размеры массивов неизменны, C

Итак, я поступил на курс начального уровня в моем университете, и мой профессор упомянул, что размеры массивов нельзя изменить, потому что они установлены в памяти.

Кроме того, эти строки в C являются просто массивами символов.

Итак, мой вопрос: как можно копировать строки различной длины с помощью strcpy, если сами длины не могут быть изменены?

(В настоящее время 2:30 и экзамен через 1 день)

Извинения, это вопрос новичка, но любая помощь очень ценится! Спасибо:)

1 ответ

Решение

Ответ прост: факты не меняются, даже если мы копируем строку, используя strcpy, После объявления размер массива не изменится. На самом деле предположим, что у вас есть массив символов

char arr[]="helloworld"; //size of the array will be 11
strcpy(arr,"funny");

Каков размер массива? Это так же, как когда объявлено. 11, Это не изменилось от оригинала.

Какова длина строки? Это 5 сейчас.

Строка - массив символов с нулевым символом в конце. Это означает, что массив может иметь 100 элементы, но строка будет состоять из нескольких символов, заканчивающихся нулем, и это может быть что угодно, например 2 длина или 5 длина или все, что возможно, учитывая, что у нас есть место для хранения \0,

Копирование строки не означает изменения размера массива.

Также обратите внимание на одну вещь - строки - это не просто массив символов, это NUL-терминатор в конце этих символов, что делает его строкой.

char s[4]="hell";

Это допустимый код C, и это не строка. Там нет места для \0, Вы не можете использовать его со стандартными функциями библиотеки строк. Дело в том, что это не будет работать с такими функциями, как strcpy, strlen и т. д. Потому что эти реализации зависят от массива символов, которые должны быть завершены, чтобы работать должным образом.

Остерегайтесь последнего примера, показанного в уме - написание этого - неопределенное поведение.

char s[4]="hell";
size_t len = strlen(s);

Нет, ты не можешь этого сделать. strlen ожидает чего-то, а ты этого не дал. Таким образом, правильный способ сказать, что вещи будут...(Вот хорошая описательная цитата, я не помню источник)

В c строка не является внутренним типом. C-строка - это соглашение, чтобы иметь одномерный массив символов, который заканчивается нулевым символом, '\0',

1) Не помню источник цитаты: если кто-нибудь, дайте мне знать. Я держал это в файле.(Не первоисточник)

Другие вопросы по тегам