указатель на массив символов

213
31 марта 2018, 16:50

В чем разница char arr[100] и char *arr1 = new char[100] и почему функция gets_s(char*) работает при gets_s(arr), но не работает gets_s(arr1)?

Answer 1

Посмотрите на определение 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 или в любом поисковике.

Answer 2

Вкратце, стек — это очень быстрое хранилище памяти, работающее по принципу LIFO и управляемое процессором. Но эти преимущества приводят к ограниченному размеру стека и специальному способу получения значений. Для того, чтобы избежать этих ограничений, можно пользоваться кучей — она позволяет создавать динамические и глобальные переменные — но управлять памятью должен либо сборщик мусора, либо сам программист, да и работает куча медленнее. tproger(c)

READ ALSO
Не могу решить задачу по программе с++

Не могу решить задачу по программе с++

Найдите такое число x, что x^2+sqrt(x)=C , с точностью не менее 6 знаков после точки

197
React и JSP - можно ли использовать вместе?

React и JSP - можно ли использовать вместе?

Хочу подключить React в Spring-проект

165
Float округления [дубликат]

Float округления [дубликат]

На данный вопрос уже ответили:

203