Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 03:00   #1
ICELIFE
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 3
По умолчанию ошибка компиляции функция strcpy()

доброго времени суток!
Прошу помощи
вот листинг при компиляции выдаёт ошибку:
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


ЛИСТИНГ:
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <string.h>
//--------------------
using std::cout;
using std::cin;
//--------------------
struct NOTE
{
char NAME[20];
int PHONE;
int BDAY[3];
};
//--------------------
void filling(NOTE Array[],int Size)
{
for(int i=0;i<Size;i++)
{
cout << "Enter a name: ";
cin >> Array[i].NAME;
cout << "Enter a phone: ";
cin >> Array[i].PHONE;
cout << "Enter day: ";
cin >> Array[i].BDAY[0];
cout << "Enter a mounts: ";
cin >> Array[i].BDAY[1];
cout << "Enter a year: ";
cin >> Array[i].BDAY[2];
}
}
//--------------------
void swap(NOTE Array[],int i)
{
char tempName[20];
int tempPhone;
int tempBday[3];
strcpy(tempName,Array[i].NAME);
strcpy(Array[i].NAME,Array[i+1].NAME);
strcpy(Array[i+1].NAME,tempName);
tempPhone=Array[i].PHONE;
Array[i].PHONE=Array[i+1].PHONE;
Array[i+1].PHONE=tempPhone;
for(int j=0;j<3;j++)
{
tempBday[j]=Array[i].BDAY[j];
Array[i].BDAY[j]=Array[i+1].BDAY[j];
Array[i+1].BDAY[j]=tempBday[j];
}
}
//--------------------
void sort(NOTE Array[],int Size)
{
for(int i=0;i<(Size-1);i++)
{
for(int j=0;j<(Size-2);j++)
{
if(Array[i].BDAY[2]<Array[i+1].BDAY[2])
{
swap(Array,i);
}
if(Array[i].BDAY[2]=Array[i+1].BDAY[2])
{
if(Array[i].BDAY[1]<Array[i+1].BDAY[1])
{
swap(Array,i);
}
if(Array[i].BDAY[1]=Array[i+1].BDAY[1])
{
if(Array[i].BDAY[0]<Array[i+1].BDAY[0])
{
swap(Array,i);
}
}
}
}
}
}
//--------------------
void print(NOTE Array[],int Size)
{
for(int i=0;i<Size;i++)
{
cout << "student: " << Array[i].NAME << "\n";
cout << "telefon number:" << Array[i].PHONE << "\n";
cout << "students bday: ";
for(int j;j<3;j++)
{
cout << Array[i].BDAY[j] << "/";
}
cout << "\n";
}
}
//--------------------
void print(NOTE Array[],int Size,int i)
{
cout << "student: " << Array[i].NAME << "\n";
cout << "telefon number: " << Array[i].PHONE << "\n";
cout << "students bday: ";
for(int j=0;j<3;j++)
{
cout << Array[i].BDAY[j] << "/";
}
cout << "\n";
}
//--------------------
bool memu(NOTE Array[],int Size)
{
int choise, sNumb;
cout << "*****MEMU*****\n";
cout << "1 - print all studens.\n";
cout << "2 - print student with number.\n";
cout << "3 - exit.\n";
cout << "Enter your choise: ";
cin >> choise;
cout << "\n";
switch(choise)
{
case 1:
print(Array,Size);
break;
case 2:
cout << "Enter number of student: ";
cin >> sNumb;
cout << "\n";
print(Array,Size,sNumb);
break;
case 3:
return true;
break;
default:
return false;
}
}
//--------------------
int main()
{
srand(time(NULL));
const Size=6;
bool exit =false;
NOTE BLOCBNOTE[Size];
filling(BLOCBNOTE,Size);
sort(BLOCBNOTE,Size);
for(;
{
exit=menu(BLOCBNOTE,Size);
if(exit)
{
break;
}
}
return 0;
}
ICELIFE вне форума Ответить с цитированием
Старый 01.12.2011, 03:04   #2
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

это вроде не ошибка а ворнинг...ничего страшного..просто попробуй вместо strcpy написать strcpy_s
revaldo666 вне форума Ответить с цитированием
Старый 01.12.2011, 03:08   #3
ICELIFE
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 3
По умолчанию

спасибо большое заработало а не могли бы вы объяснить почему "_S" это изменение функции помогло и что именно поменялось в её работе?
ICELIFE вне форума Ответить с цитированием
Старый 01.12.2011, 03:18   #4
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Цитата:
Сообщение от ICELIFE Посмотреть сообщение
спасибо большое заработало а не могли бы вы объяснить почему "_S" это изменение функции помогло и что именно поменялось в её работе?
Да собственно ничего не поменялось...просто компилятору такой синтаксис видимо больше по душе)
revaldo666 вне форума Ответить с цитированием
Старый 01.12.2011, 03:21   #5
ICELIFE
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 3
По умолчанию

спасибо большое
ICELIFE вне форума Ответить с цитированием
Старый 01.12.2011, 09:17   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Да собственно ничего не поменялось...просто компилятору такой синтаксис видимо больше по душе)
Поменялось, это другая функция и там доп. проверки. И дело не в синтаксисе...
p51x вне форума Ответить с цитированием
Старый 01.12.2011, 09:31   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, это обычное предупреждение.
такие я вообще отключаю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2011, 11:12   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

ICELIFE

вот листинг при компиляции выдаёт ошибку:
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


использование функций strcpy и им подобных считается опасным.
раньше быдло-кодеры писали свои быдло-программы, которые глючили и падали, а разъяренные юзеры обвиняли во всем microsoft и лично Билли. Ему это надоело и microsoft придумала Secure CRT
Теперь при падении программы есть формальный повод послать такого "программера" в пешее эротическое, переделывать свою поделку.
Rififi вне форума Ответить с цитированием
Старый 25.04.2013, 22:23   #9
N0rator
Новичок
Джуниор
 
Регистрация: 25.04.2013
Сообщений: 2
По умолчанию

Здравствуйте. У меня есть вопрос касательно strcpy. Мне тоже выдало "Предупреждение", по совету revaldo666 я добавил синтаксис _s, но при компиляции мне Visual studio выдал мне ошибку:
Код:
strcpy_s: функция не принимает 2 аргументов.
Ругается на строку:
Код:
strcpy_s(fn, first_name);
Где fn - указатель(объявлен таким образом - char * fn = new char[strlen(first_name) + 1];), а first_name - массив, состоящий из 80 объектов типа char.
Вот исходный код:
Код:
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
char * getname_first(void);
char * getname_second(void);
char getgrade_letter(void);

int main()
{
char * name_first;
name_first = getname_first();
char * name_second;
name_second = getname_second();
char grade;
grade = getgrade_letter();
cout << "What is your age? ";
int age;
cin >> age;
cout << "Name: " << name_second << ", " << name_first << "\n";
cout << "Grade: " << grade << "\n";
cout << "Age: " << age;
delete [] name_first;
delete [] name_second;
}

char * getname_first()
{
	char first_name[80];
	cout << "What is your first name? ";
	cin >> first_name;
	char * fn = new char[strlen(first_name) + 1];
	strcpy_s(fn, first_name);

	return fn;
}

char * getname_second()
{
	char second_name[80];
	cout << "What is your last name? ";
	cin >> second_name;
	char * sn = new char[strlen(second_name) + 1];
	strcpy(sn, second_name);

	return sn;
}

char getgrade_letter()
{
	char * grades = new char[4];
	cout << "What letter grade do you deserve?(A,B or C) ";
	char grade[2];
	cin.get(grade[0]);
	grades[0] = 'A';
	grades[1] = 'B';
	grades[2] = 'C';
	char gr;
	if(grade[0] = grades[0])
	{
		grades = grades + 1;
		gr = grades[0];
	}
	else
	{
		if(grade[0] = grades[1])
		{
			grades = grades + 1;
			gr = grades[1];
		}
		else
		{
			if(grade[0] = grades[2])
			{
				grades = grades + 1;
				gr = grades[2];
			}
		}
	}
	return gr;
}
N0rator вне форума Ответить с цитированием
Старый 25.04.2013, 22:27   #10
N0rator
Новичок
Джуниор
 
Регистрация: 25.04.2013
Сообщений: 2
По умолчанию

Примечание:
Я пока что beginer так что, как говорится - не судите строго.
N0rator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка компиляции ALEX INCORPORATEED Помощь студентам 7 14.09.2012 00:46
Ошибка компиляции? hardorsoft Помощь студентам 5 19.05.2011 15:17
Ошибка компиляции Lokos Общие вопросы Delphi 3 07.10.2010 08:17
Ошибка компиляции Пaвeл Общие вопросы C/C++ 2 25.06.2010 19:22
Ошибка компиляции ImmortalAlexSan C++ Builder 3 20.12.2009 21:19