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

Почему функция копирования строк не принимает два параметра? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.80
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
19.05.2011, 11:48     Почему функция копирования строк не принимает два параметра? #1
Собсно. IDE MSVS
C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <stdio.h>
int main(){
}
 
char* f (char* x, char* y) {
 strcpy_s (x, y);
}
, вот, говорит что не принимает два параметра. "error C2660: strcpy_s: функция не принимает 2 аргументов"
А чё, она, один что ли принимает?

...ОК, тогда пишу:
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <stdio.h>
 
int main(){
}
 
char* f (char* x, char* y) {
 strcpy (x, y);
}
а щас пишет, что прототипа strcpy в загашнике нет. Короче странно и непонятно, тем более что последний код скромный g++ (IDE DEV C++) компилит без проблем.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2011, 11:48     Почему функция копирования строк не принимает два параметра?
Посмотрите здесь:

Почему встроенная функция вызывает конструктор копирования? C++
C++ функция принимает два параметра типа double и возвращает значение типа double
Написать функцию, которая принимает два параметра типа unsigned long long и выводит их на экран C++
Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int C++
C++ Функция, которая получает два параметра и возвращает результат деления первого параметра на второй
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aneron
 Аватар для Aneron
157 / 156 / 12
Регистрация: 20.04.2010
Сообщений: 570
19.05.2011, 11:53     Почему функция копирования строк не принимает два параметра? #2
strcpy_s - принимает три параметра. первая строка,размер первой строки, вторая строка
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
19.05.2011, 12:05  [ТС]     Почему функция копирования строк не принимает два параметра? #3
Вот, в этом случае два параметра
C++
1
2
3
4
5
6
7
8
9
10
11
#include <windows.h>
#include <stdio.h>
 
int main(){
}
 
 
void f (char* x ) {
 char z [MAX_PATH]; 
 strcpy_s (z, x);
}
И ничё, компилится себе.
Я понимаю, что длина первой строки MAX_PATH, известна то есть. Вроде как её поэтому и необязательно указывать параметром. Но! Дело в том, что если этот параметр необязателен, то он должен быть ТРЕТЬИМ. А не вторым, как Вы сказали.
Так что неувязочка выходит.
Aneron
 Аватар для Aneron
157 / 156 / 12
Регистрация: 20.04.2010
Сообщений: 570
19.05.2011, 12:08     Почему функция копирования строк не принимает два параметра? #4
Давайте не будем спорить. Посмотрите описание функции и параметры которые она принимает.
"error C2660: функция не принимает столько-то аргументов"-ошибка, когда подставляют не правильное кол-во параметров
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.05.2011, 12:24     Почему функция копирования строк не принимает два параметра? #5
Цитата Сообщение от kravam Посмотреть сообщение
, вот, говорит что не принимает два параметра. "error C2660: strcpy_s: функция не принимает 2 аргументов"
2 аргумента, или второй аргумент?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
19.05.2011, 12:35  [ТС]     Почему функция копирования строк не принимает два параметра? #6
2 аргументов

Добавлено через 3 минуты
Короче муть какая-то, чтобы одну строку скопировать в другую, надо знать длину получателя. Уж не знаю, зачем это нужно (может выход за границы контролируют) а только мне лишний гемор. Я бы и сам проконтролировал где мне надо, оно надёжней было бы. Как я люблю g++!
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.05.2011, 12:57     Почему функция копирования строк не принимает два параметра? #7
Цитата Сообщение от kravam Посмотреть сообщение
Как я люблю g++!
strcpy_s и др. чисто майкрософтовская фишка, тебе никто не запрещает пользоваться стандартными функциями.

Добавлено через 6 минут
Цитата Сообщение от kravam Посмотреть сообщение
Я понимаю, что длина первой строки MAX_PATH, известна то есть. Вроде как её поэтому и необязательно указывать параметром. Но! Дело в том, что если этот параметр необязателен, то он должен быть ТРЕТЬИМ. А не вторым, как Вы сказали.
Так что неувязочка выходит.
Их две функции для указателей:
C
1
2
3
4
5
errno_t strcpy_s(
   char *strDestination,
   size_t sizeInBytes,
   const char *strSource 
);
и для статического массива в качестве приемника
C++
1
2
3
4
5
template <size_t size>
errno_t strcpy_s(
   char (&strDestination)[size],
   const char *strSource 
); // C++ only
http://msdn.microsoft.com/es-es/libr...(v=vs.80).aspx
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
19.05.2011, 15:15  [ТС]     Почему функция копирования строк не принимает два параметра? #8
Короче, размер должен быть явен, либо параметром либо как размер. А про использование 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.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
19.05.2011, 16:25     Почему функция копирования строк не принимает два параметра? #9
kravam, ну так установи _CRT_SECURE_NO_WARNINGS и не будет предупреждения.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.05.2011, 17:10     Почему функция копирования строк не принимает два параметра? #10
kravam, было уже, эту темку почитайте.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
19.05.2011, 17:18     Почему функция копирования строк не принимает два параметра? #11
...ОК, тогда пишу:
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
#include <stdio.h>
 
int main(){
}
 
char* f (char* x, char* y) {
 strcpy (x, y);
}

а щас пишет, что прототипа strcpy в загашнике нет.
kravam, а не смущает, что "загашник" ( ) для strcpy() - это string.h (cstring) ?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
19.05.2011, 19:41  [ТС]     Почему функция копирования строк не принимает два параметра? #12
g++ этот код компилит и без string.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 10:45     Почему функция копирования строк не принимает два параметра?
Еще ссылки по теме:

C++ Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true C++
Функция принимает два одномерных массива C++

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

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
20.05.2011, 10:45     Почему функция копирования строк не принимает два параметра? #13
kravam, это просто особенности g++.
Yandex
Объявления
20.05.2011, 10:45     Почему функция копирования строк не принимает два параметра?
Ответ Создать тему
Опции темы

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