Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.80
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,507
#1

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

19.05.2011, 11:48. Просмотров 5903. Ответов 12
Метки нет (Все метки)

Собсно. 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++) компилит без проблем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2011, 11:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему функция копирования строк не принимает два параметра? (C++):

Функция, которая получает два параметра и возвращает результат деления первого параметра на второй - C++
Тут такая задача: написать функцию, которая получает два параметра тип unsigned short int и возвращает результат деления первого параметра...

Шаблон принимает два типовых параметра. Если параметры - одни и те же типы, вернуть true - C++
Помогите с задачей. Реализовать простой шаблон SameType. Этот шаблон не содержит никаких методов, а только одно статическое константное...

Функция принимает два одномерных массива - C++
Помогите написать программу с комментариями. Функция принимает два одномерных массива и выводит на экран общие элементы. Функция должна...

Написать функцию, которая принимает два параметра типа unsigned long long и выводит их на экран - C++
Я самое наглое , ленивое и бессовестное чудовище)) но тем не менее Напишите функцию, которая принимает два параметра типа unsigned...

Почему встроенная функция вызывает конструктор копирования? - C++
Почему встроенная функция вызывает конструктор копирования или всегда ли встроенная функция действительно встроеннаая? Но всё по порядку....

Функция принимает любое количество строк а затем складывает их - C++
Добрый день Нужно написать функция которая принимала бы любое количество строк а затем складывала их Возвращаемое значение. Вопрос...

12
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 574
19.05.2011, 11:53 #2
strcpy_s - принимает три параметра. первая строка,размер первой строки, вторая строка
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,507
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, известна то есть. Вроде как её поэтому и необязательно указывать параметром. Но! Дело в том, что если этот параметр необязателен, то он должен быть ТРЕТЬИМ. А не вторым, как Вы сказали.
Так что неувязочка выходит.
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 574
19.05.2011, 12:08 #4
Давайте не будем спорить. Посмотрите описание функции и параметры которые она принимает.
"error C2660: функция не принимает столько-то аргументов"-ошибка, когда подставляют не правильное кол-во параметров
0
taras atavin
3883 / 1757 / 92
Регистрация: 24.11.2009
Сообщений: 27,566
19.05.2011, 12:24 #5
Цитата Сообщение от kravam Посмотреть сообщение
, вот, говорит что не принимает два параметра. "error C2660: strcpy_s: функция не принимает 2 аргументов"
2 аргумента, или второй аргумент?
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,507
19.05.2011, 12:35  [ТС] #6
2 аргументов

Добавлено через 3 минуты
Короче муть какая-то, чтобы одну строку скопировать в другую, надо знать длину получателя. Уж не знаю, зачем это нужно (может выход за границы контролируют) а только мне лишний гемор. Я бы и сам проконтролировал где мне надо, оно надёжней было бы. Как я люблю g++!
0
kazak
3051 / 2372 / 160
Регистрация: 11.03.2009
Сообщений: 5,437
Завершенные тесты: 1
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/library/td1esda9(v=vs.80).aspx
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,507
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.
0
gooseim
Эксперт С++
509 / 413 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
19.05.2011, 16:25 #9
kravam, ну так установи _CRT_SECURE_NO_WARNINGS и не будет предупреждения.
0
easybudda
Модератор
Эксперт CЭксперт С++
9912 / 5835 / 975
Регистрация: 25.07.2009
Сообщений: 11,004
19.05.2011, 17:10 #10
kravam, было уже, эту темку почитайте.
1
Kastaneda
Jesus loves me
Эксперт С++
4717 / 2921 / 242
Регистрация: 12.12.2009
Сообщений: 7,434
Записей в блоге: 2
Завершенные тесты: 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) ?
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,507
19.05.2011, 19:41  [ТС] #12
g++ этот код компилит и без string.h
0
gooseim
Эксперт С++
509 / 413 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
20.05.2011, 10:45 #13
kravam, это просто особенности g++.
0
20.05.2011, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 10:45
Привет! Вот еще темы с ответами:

функция принимает два параметра типа double и возвращает значение типа double - C++
Напишите функцию, которая принимает два параметра типа double и возвращает значение типа double, содержащее их минимум....

Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int - C++
Операции над целыми числами осуществляются быстрее, чем над числами с плавающей точкой. Напишите перегруженную функцию power (), ...

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ? - C++
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов - C++
Разработайте перегружены функции, в которые передаются два параметра типов int или float и три параметра типов int или float и возвращают...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.