Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 27.09.2017
Сообщений: 10

С4996

22.10.2017, 15:37. Показов 1897. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "stdafx.h" 
#include <iostream> 
#include <cstring> 
#include <stdio.h> 
#include <string.h> 
#include "windows.h" 
#include "locale.h" 
 
using namespace std;
 
 
char*strcpy1(char*dest, char*s, int p, int k)
{
    int lens = strlen(s);
    if (p >= lens) {
        *dest = 0;
        return dest;
    }
    int i = p;
    for (; s[i] && i<p + k; ++i)
        dest[i - p] = s[i];
    dest[i] = 0;
    return dest;
 
}
 
int main()
{
    char *s_source[] = { "01234", "01234", "01234", "01234", "01234", "01234", "" }, dest[100];
    int n = sizeof(s_source) / sizeof(char*);
    char **s = new char*[n];
    for (int i = 0; i<n; ++i) {
        s[i] = new char[15];
        strcpy(s[i], s_source[i]);
    }
    int p[] = { 1, 0, 3, 20, 3, 1, 0 };
    int k[] = { 2, 3, 2, 1, 20, 0, 1 };
    for (int i = 0; i < n; ++i) {
        printf("\nTest%i\n", i + 1);
        printf("my_strcpy1( \"%s\",\"%s\", %i, %i) =\"%s\"\n", dest, s[i], p[i], k[i], strcpy1(dest, s[i], p[i], k[i]));
    }
    for (int i = 0; i<n; ++i)
        delete[] s[i];
    delete[] s;
    system("pause");
    return 0;
}
Какую проверку надо добавить, чтобы С4996 не возникало?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2017, 15:37
Ответы с готовыми решениями:

Ошибка С4996
проблема необходимо копировать слова в массив **char Считывал строку с пробелами, далее переводил строку в нижний регистр, дабы иметь...

Ошибка С4996
Здравствуйте, компилятор ВС2015 выбаёт ошибку С4996 и жалуется на strcpy #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Ошибки С4996 и С42743
Подскажите, как устранить ошибки, вот код программы: #include &quot;GL/glew.h&quot; #include &quot;GL/glut.h&quot; #include &lt;iostream&gt; ...

23
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,026
26.10.2017, 22:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
не всегда.
точнее - почти никогда.
Придираемся к формулировке? Хорошо. Что такое, по-твоему, костыль?
Цитата Сообщение от hoggy Посмотреть сообщение
ни с каких.
вообще не очевидно,
как мог зародиться подобный вопрос.
Мне еще раз процитировать? Пожалуйста:
Цитата Сообщение от hoggy Посмотреть сообщение
нельзя дефайнить ключевые слова,
и стандартные имена.
Теперь повторяю вопрос: с каких пор strcpy_s внезапно стало ключевым словом или стандартным именем?
Цитата Сообщение от hoggy Посмотреть сообщение
очевидно, что они не просто так возникли,
и их не просто так завезли в стандарт.
А их и не завезли. Цитирую
ISO/IEC 9899:201x
K.2.1
This annex specifies a series of optional extensions
Это опциональное расширение. Его не обязаны реализовывать.
Посему повторяю предложение: запусти этот код на компиляторах отличных от msvs. Хотя бы в gcc, который старается следовать стандартам (в том числе, с11) и который можно скачать бесплатно для любого использования.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.10.2017, 00:11
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Придираемся к формулировке? Хорошо. Что такое, по-твоему, костыль?
я не придираюсь.
исхожу из реальной практики.
нет ничего более постоянного,
чем временное решение.

фишка в том, что костыль забивают не просто так.
а потому что нужно,
что бы здесь и сейчас задача была решена,
и код заработал.
тобишь костыли, при всей их кажущейся ужассности,
обычно вполне себе работоспособны.
и живут в проектах годами.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Мне еще раз процитировать? Пожалуйста:
в первоначальном вашем цитировании,
вы как то забыли упомянуть про "стандартные имена".
а уж что вам делать или не делать - ваше личное дело.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Теперь повторяю вопрос: с каких пор strcpy_s внезапно стало ключевым словом или стандартным именем?
начиная с с++11

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А их и не завезли. Цитирую
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
This annex specifies a series of optional extensions
вы ошибаетесь.

вот как вы из моей цитаты вырвали из контекста.
так же теперь вырываете из контекста в стандартном документе:
This annex specifies a series of optional extensions that can be useful in the mitigation of
security vulnerabilities in programs, and comprise new functions, macros, and types
declared or defined in existing standard headers.
2 An implementation that defines _ _STDC_LIB_EXT1_ _ shall conform to the
specifications in this annex.380)
3 Subclause K.3 should be read as if it were merged into the parallel structure of named
subclauses of clause 7
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это опциональное расширение. Его не обязаны реализовывать.
Посему повторяю предложение: запусти этот код на компиляторах отличных от msvs. Хотя бы в gcc, который старается следовать стандартам (в том числе, с11) и который можно скачать бесплатно для любого использования.
дело не в том, обязаны или нет.
дело в том, что расширение стандартизированное.
и если реализовали - это уже часть стандарта.
и относится к нему нужно как к части стандарта.

я предоставил вам ссылочку на офф. сайт.
там есть пример.
можно нажать на кнопочку, что бы собрать и запустить.
не нравится оффициальный источник?

пожалуйста.
ваш горячо любимый gcc
http://rextester.com/ILTE4865

вот его лучший друг - компилятор clang
http://rextester.com/KTTKD55460

со студией итак понятно.
0
 Аватар для COKPOWEHEU
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,026
27.10.2017, 10:28
Цитата Сообщение от hoggy Посмотреть сообщение
тобишь костыли, при всей их кажущейся ужассности, обычно вполне себе работоспособны. и живут в проектах годами.
Разумеется. Вот только городились они вполне для конкретного случая - исправление конкретной ошибки, добавление функциональности. Но делались они в обход логики программы и, зачастую, в спешке. То есть неаккуратно. То есть там наверняка есть ошибки или UB, работающее только при известных условиях. После рефакторинга, когда костыль переписывается по-нормальному, он перестает быть костылем.
Не думаю что это достойный предмет спора: костыль по определению что-то кривое, прикрученное сбоку. В нем наверняка закопаны неочевидные грабли, которые могут выстрелить в любой момент.
Другое дело когда костыль оформлен как слой совместимости с конкретным компилятором или платформой, обернут #ifdef'ами и тому подобным. То есть его применение строго ограничено областью, где в нем уверены. Но это уже не очень-то и костыль.
Цитата Сообщение от hoggy Посмотреть сообщение
и если реализовали - это уже часть стандарта.
В том-то и дело что НЕ реализовали
Цитата Сообщение от hoggy Посмотреть сообщение
пожалуйста.
ваш горячо любимый gcc
http://rextester.com/ILTE4865
Прекрасно! Вы вообще проверяете свои ссылки?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    char *src = "Take the test.";
//  src[0] = 'M' ; // this would be undefined behavior
    char dst[strlen(src) + 1]; // +1 to accomodate for the null terminator
    strcpy(dst, src);
    dst[0] = 'M'; // OK
    printf("src = %s\ndst = %s\n", src, dst);
 
#ifdef __STDC_LIB_EXT1__
    set_constraint_handler_s(ignore_handler_s);
    int r = strcpy_s(dst, sizeof dst, src);
    printf("dst = "%s", r = %d\n", dst, r);
    r = strcpy_s(dst, sizeof dst, "Take even more tests.");
    printf("dst = "%s", r = %d\n", dst, r);
#endif
}
Вывод:
src = Take the test.
dst = Make the test.

То есть strcpy_s находится в отклчюченном блоке #ifdef. С тем же успехом можно привести под
C
1
2
3
4
5
6
7
#include <stdio.h>
int main(void){
#if 1==0
  какая_то_функция();    
#endif
    printf("finish\n");
}
и радоваться существованию функции какая_то_функция()

Добавлено через 3 минуты
Ах да, еще вопрос: чем не устроил strncpy? На первый взгляд делает тоже самое что strcpy_s.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.10.2017, 15:34
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Прекрасно! Вы вообще проверяете свои ссылки?
действительно.
чот я налажал))

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
чем не устроил strncpy?
она тоже с суффиксом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2017, 15:34

Ошибка С4996
нашел следующий код: #include &lt;iostream&gt; #include &lt;sys/types.h&gt; #include &lt;winsock2.h&gt; #include &lt;memory.h&gt; #include...

"предупреждение С4996"- как от нее избавиться?
собственно, написал программу. Вроде все верно, но Visual Studio ругается на fwrite, fopen в программе и отказывается ее строить, буду ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru