В чем разница char arr[100]
и char *arr1 = new char[100]
и почему функция gets_s(char*)
работает при gets_s(arr)
, но не работает gets_s(arr1)
?
Посмотрите на определение gets_s
:
char *gets_s(
char *buffer,
size_t sizeInCharacters
);
wchar_t *_getws_s(
wchar_t *buffer,
size_t sizeInCharacters
);
template <size_t size>
char *gets_s(
char (&buffer)[size]
); // C++ only
template <size_t size>
wchar_t *_getws_s(
wchar_t (&buffer)[size]
); // C++ only
В случае когда вы передаете именно массив, не указатель на массив, то шаблон сам вычисляет размер массива который вы ему передаете. Когда вы передаете указатель на массив, вам необходимо передать размер массива.
Про стек и кучу, можете прочитать на Wikipedia или в любом поисковике.
Вкратце, стек — это очень быстрое хранилище памяти, работающее по принципу LIFO и управляемое процессором. Но эти преимущества приводят к ограниченному размеру стека и специальному способу получения значений. Для того, чтобы избежать этих ограничений, можно пользоваться кучей — она позволяет создавать динамические и глобальные переменные — но управлять памятью должен либо сборщик мусора, либо сам программист, да и работает куча медленнее. tproger(c)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Найдите такое число x, что x^2+sqrt(x)=C , с точностью не менее 6 знаков после точки