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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2010, 00:30   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию strcpy(str, strlen(""), "") - error!

Есть класс (упрощенно):

Код:
class const_string
{
public:
	const_string(char const* s)
	{
		strcpy(str, s); / strcpy_s(str, strlen(s), s);
		len = strlen(s);
	}
private:
	char *str;
	size_t len;
};
Мне нужно создать объект

Код:
const_string s("");
Компилятор ругается в этом месте:

Код:
strcpy(str, s); / strcpy_s(str, strlen(s), s);
Есть способ обойтись без проверки s на равенство ""?
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 09.02.2010, 11:57   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

1. странное имя класса
2.
Код:
strcpy(str, s); / strcpy_s(str, strlen(s), s);
что такое "/" ? если это недокомментарий, то сразу скажу, не используй корявые микрософтские *safe функции, аля func_s. они меняются из версии в версию. чем тебе strncpy не понравилась?

3.
Цитата:
Есть способ обойтись без проверки s на равенство ""?
в упор не вижу такой проверки у тебя. и зачем она нужна, не пойму?

и еще, перед копированием строки неплохо бы выделить память в приемник, ога


Код:
class const_string {
public:
	const_string(char const* s)
	{
		len = strlen(s);
		str = new char[len + 1];
		strncpy(str, s, len);
		str[len] = '\0';
	}

	~const_string()
	{
		delete [] str;
	}

	void print()
	{
		cout << str << endl;
	}

private:
	char* str;
	size_t len;
};



int main()
{
	const_string str1("");
	const_string str2("123");
	str1.print();
	str2.print();
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 09.02.2010 в 12:03.
pproger вне форума Ответить с цитированием
Старый 09.02.2010, 17:21   #3
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Да, задача поставлена странно. Вопрос разрешился под утро.

Мне нужен был универсальный нединамический класс для константных си-строк. Поэтому память не выделяется. Но тут я ступил, нужно было просто переопределять указатель, а я запарился на строках.

Код:
class const_string
{
public:
	const_string(char const* s)
	{
		str = s;
		len = strlen(str);
	}
private:
	char *str;
	size_t len;
};
strcpy(str, s); / strcpy_s(str, strlen(s), s); / - этот символ значит только то, что приводимый пример одинаково работал как для strcpy(str, s); так и для strcpy_s(str, strlen(s), s);

За советы спасибо!
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
отличие char* str ="..." от char ...[]="..." StarWorm Общие вопросы C/C++ 2 20.11.2008 08:48