Форум программистов, компьютерный форум CyberForum.ru

При вызове конструктора ошибка: L "Buffer is too small" & & 0 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
NinjaNoob
1 / 1 / 0
Регистрация: 21.12.2012
Сообщений: 19
23.03.2014, 18:09     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #1
Привет.
При вызове конструктора вылетает эта ошибка.
При вызове конструктора ошибка: L "Buffer is too small" & & 0

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Student(char *n, char *s, char *p, int y, char *g)
    {
        name = new char[strlen(n)+1];
        surname = new char[strlen(s) + 1];
        patr = new char[strlen(p) + 1];
        group = new char[strlen(g) + 1];
 
        strcpy_s(name, strlen(n), n);
        strcpy_s(surname, strlen(s), s);
        strcpy_s(patr, strlen(p), p);
        strcpy_s(group, strlen(g), g);
 
        year = y;
    }
Как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 18:12     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #2
Цитата Сообщение от NinjaNoob Посмотреть сообщение
При вызове конструктора вылетает эта ошибка.
Вызов покажите.
NinjaNoob
1 / 1 / 0
Регистрация: 21.12.2012
Сообщений: 19
23.03.2014, 18:16  [ТС]     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #3
C++
1
Student B("Иванов", "Иван", "Иванович", 1993, "АНТ21");
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 18:39     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #4
C++
1
strcpy_s(name, strlen(n) + 1, n);
NinjaNoob
1 / 1 / 0
Регистрация: 21.12.2012
Сообщений: 19
23.03.2014, 19:10  [ТС]     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #5
Спасибо, помогло!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 19:12     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #6
Цитата Сообщение от NinjaNoob Посмотреть сообщение
Спасибо, помогло!
Зачем вам эти заморочки microsoft? Есть же стандартные функции.
NinjaNoob
1 / 1 / 0
Регистрация: 21.12.2012
Сообщений: 19
23.03.2014, 19:23  [ТС]     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #7
Имеете ввиду <string> ?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 19:29     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #8
Цитата Сообщение от NinjaNoob Посмотреть сообщение
Имеете ввиду <string> ?
Имею ввиду strcpy_s().

Добавлено через 2 минуты
Стандарт:
http://www.cplusplus.com/reference/c...cpy/?kw=strcpy
http://www.cplusplus.com/reference/cstring/strncpy/
NinjaNoob
1 / 1 / 0
Регистрация: 21.12.2012
Сообщений: 19
23.03.2014, 19:31  [ТС]     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #9
студия не дает использовать обычную strcpy. заставляет использовать strcpy_s, которая уже с тремя параметрами
При вызове конструктора ошибка: L "Buffer is too small" & & 0
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.03.2014, 19:39     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #10
Цитата Сообщение от NinjaNoob Посмотреть сообщение
студия не дает использовать обычную strcpy
Смотря какая студия (до 10-й включительно - даёт). А если не даёт (паранойя microsoft), то можно сделать, чтобы давала:
Ошибка в SCANF
supvlmail
-49 / 1 / 0
Регистрация: 12.03.2015
Сообщений: 24
29.06.2016, 07:50     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #11
При использовании strcpy строка может выйти за пределы выделенной памяти, лучше использовать strncpy.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2016, 08:05     При вызове конструктора ошибка: L "Buffer is too small" & & 0
Еще ссылки по теме:

C++ Ошибка : " L Buffer is too small & & 0"
C++ Ошибка с delete [] - "CRT detected that the application wrote to memory after end of heap buffer"
В чём разница между возвратом "string" и "const string&" & C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11824 / 6803 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
29.06.2016, 08:05     При вызове конструктора ошибка: L "Buffer is too small" & & 0 #12
Цитата Сообщение от alsav22 Посмотреть сообщение
паранойя microsoft
Из стандарта C11:
Traditionally, the C Library has contained many functions that trust the programmer to provide output character arrays big enough to hold the result being produced. Not only do these functions not check that the arrays are big enough, they frequently lack the information needed to perform such checks. While it is possible to write safe, robust, and error-free code using the existing library, the library tends to promote programming styles that lead to mysterious failures if a result is too big for the provided array.

A common programming style is to declare character arrays large enough to handle most practical cases. However, if these arrays are not large enough to handle the resulting strings, data can be written past the end of the array overwriting other data and program structures. The program never gets any indication that a problem exists, and so never has a chance to recover or to fail gracefully.

Worse, this style of programming has compromised the security of computers and networks. Buffer overflows can often be exploited to run arbitrary code with the permissions of the vulnerable (defective) program.

If the programmer writes runtime checks to verify lengths before calling library functions, then those runtime checks frequently duplicate work done inside the library functions, which discover string lengths as a side effect of doing their job.

This annex provides alternative library functions that promote safer, more secure programming. The alternative functions verify that output buffers are large enough for the intended result and return a failure indicator if they are not. Data is never written past the end of an array. All string results are null terminated.

This annex also addresses another problem that complicates writing robust code:
functions that are not reentrant because they return pointers to static objects owned by the function. Such functions can be troublesome since a previously returned result can change if the function is called again, perhaps by another thread.
Также есть описание этих функций (_s).
Конечно, там написано, что реализация оставляет
за собой право решить предоставлять эти функции или нет.
В случае, если данные функции предоставляются, макрос
_ _STDC_WANT_LIB_EXT1_ _ ставится в 1, если нет, то в 0.
Yandex
Объявления
29.06.2016, 08:05     При вызове конструктора ошибка: L "Buffer is too small" & & 0
Ответ Создать тему
Опции темы

Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru