Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182

Функция std::copy устарела?

03.02.2016, 10:43. Показов 2414. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct CLASS::SdpOpaque {using Vector = std::vector<uint8_t>; Vector data; Vector::iterator pos;};
 
int СLASS::func_name(void *opaque, uint8_t *buf, int size) /*noexcept*/
{
    assert(opaque);
    assert(buf);
    auto octx = static_cast<CLASS::SdpOpaque*>(opaque);
 
    if (octx->pos == octx->data.end()) {
        return 0;
    }
 
    auto dist = static_cast<int>(std::distance(octx->pos, octx->data.end()));
    auto count = std::min(size, dist);
 
    std::copy(octx->pos, octx->pos + count, buf);
    octx->pos += count;
 
    return count;
}
Visual studio ultimate 2013 выдает следующую ошибку при сборке с указанием на
C++
1
std::copy(octx->pos, octx->pos + count, buf);
c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(2132): error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' (CLASS.cpp)
1> c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(2113) : see declaration of 'std::_Copy_impl'
1> c:\projects\CLASS.cpp(230) : see reference to function template instantiation '_OutIt std::copy<std::_Vector_iterator<std::_Ve ctor_val<std::_Simple_types<unsigned char>>>,uint8_t*>(_InIt,_InIt,_OutIt)' being compiled
1> with
1> [
1> _OutIt=uint8_t *
1> , _InIt=std::_Vector_iterator<std::_Vector _val<std::_Simple_types<unsigned char>>>
1> ]

Как это исправить? И если проблема не в устаревшем std::copy, то в чем?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2016, 10:43
Ответы с готовыми решениями:

Std::begin() ,std::end(),std::copy
...// int main() { std::vector&lt;double&gt; data;//Работает cout &lt;&lt; std::begin(data); double *data=new double; ...

Стандартный поток и STL (std::copy to std::cout)
#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; #include &lt;string&gt; using namespace std; ...

std::copy
typedef std::list&lt;size_t&gt; Path; Path::iterator _it; Path path; std::copy( _it, path.end(), std::ostream_iterator&lt;size_t&gt;( std::cout,...

9
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.02.2016, 10:56
Студия тебе видимо прозрачно намекает на copy_s() , которая считается безопасной.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
03.02.2016, 11:08  [ТС]
Сейчас попробую.
0
03.02.2016, 11:12

Не по теме:

Цитата Сообщение от Hikari Посмотреть сообщение
Atashi no namae ga Elen desu.
Atashi no namae wa Elen desu. А то у вас получается, что Elen - это именно ваше имя, а не фамилия, отчество, прозвище и пр. :)

0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
03.02.2016, 11:17  [ТС]
Цитата Сообщение от Hikari Посмотреть сообщение
Студия тебе видимо прозрачно намекает на copy_s() , которая считается безопасной.
ммм... в справке msdn что-то не ясно.
Можно пример, как должна выглядеть тогда эта строка?
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
03.02.2016, 11:27
Увы примера у меня нет.
Просто знаю, что есть такие функции, которые вовсю рекомендуются на замену старым, но никогда не использовала их. сама.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
03.02.2016, 12:51  [ТС]
Проблема с copy решилась, посути, сама собой... так и не сделал copy_s, но появилась другая ошибка в функции, вызывающей функцию из первого сообщения. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int СLASS::func_name2(AVFormatContext **pctx, const char *data, AVDictionary **options) /*noexcept*/
{
    assert(pctx);
    *pctx = avformat_alloc_context();
    assert(*pctx);
 
    const size_t avioBufferSize = 4096;
    auto avioBuffer = static_cast<uint8_t*>(av_malloc(avioBufferSize));
    auto opaque = new CLASS::SdpOpaque();
 
    opaque->data = CLASS::SdpOpaque::Vector(data, data + strlen(data));
    opaque->pos = opaque->data.begin();
    
    auto pbctx = avio_alloc_context(avioBuffer, avioBufferSize, 0, opaque, func_name/*(opaque, avioBuffer, avioBufferSize)*/, nullptr, nullptr);
    assert(pbctx);
 
    (*pctx)->pb = pbctx;
 
    auto infmt = av_find_input_format("sdp");
 
    return avformat_open_input(pctx, "memory.sdp", infmt, options);
}
Во-первых, visual studio в коде помечает func_name при вызове как:
argument with type int is incompatible with type int(*).
А при сборке высвечивается следующее:
error C2664: 'AVIOContext *avio_alloc_context(unsigned char *,int,int,void *,int (__cdecl *)(void *,uint8_t *,int),int (__cdecl *)(void *,uint8_t *,int),int64_t (__cdecl *)(void *,int64_t,int))' : cannot convert argument 5 from 'int' to 'int (__cdecl *)(void *,uint8_t *,int)'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>error C3536: 'pbctx': cannot be used before it is initialized
1>error C3536: 'pbctx': cannot be used before it is initialized
1>error C2440: '=' : cannot convert from 'int' to 'AVIOContext *'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

Как сделать это преобразование или избежать его вообще?

Добавлено через 26 минут
А, нет, проблема с copy осталась. Не получается нормально организовать copy_s, согласующуюся с кодом.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.02.2016, 08:49
feck, Добавьте #define SCL_SECURE_NO_WARNINGS или в опциях проекта через -D или в файле кода.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
04.02.2016, 13:08  [ТС]
ForEveR, уже пробовал, но это срабатывает через раз и выдает предупреждения, а не ошибки.
Хоть как-то работает - и хорошо. Но вообще приятнее было бы вообще без этого.
0
04.02.2016, 13:22

Не по теме:

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
А то у вас получается, что Elen - это именно ваше имя
Хи-хи-хи, осталось копирайтик купить :ghaha:
P.S. поправила подпись.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.02.2016, 13:22
Помогаю со студенческими работами здесь

Std::copy / memcpy
Щас сойду с ума template&lt;typename T, typename U&gt; constexpr auto convert(T val) { auto *buf = reinterpret_cast&lt;uint8_t*&gt;(&amp;val);...

Ошибка в std::copy не ясна
здравствуйте, есть следующий код, в котором возникает ошибка во время выполнения: std::string array1 = { &quot;hello&quot;,...

Есть ли в Qt аналог std::string copy ?
Это снова я :) В std::string есть замечательная функция для копирования своего содержимого в какой - нибуть выходной буффер - copy, а в...

Не получается использовать std::copy как memcpy?
Получил задание переписать свою код: Поля x, y указывают координаты, куда должен быть помещен файл - кадр, а width, height ширину и...

Std::copy как скопировать часть строки массива byte?
Вот из этой строки: BYTE pbHash; Нужно скопировать содержимое с 0й по 15ю ячейку, в эту строку: BYTE bAesKey; Так будет? ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru