Вопрос по C++

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#16 Сообщение 09.08.2010, 19:46

А зачем графические приложения? Ты ведь не собираешься работать с графикой?
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
GanGSISoft
Полковник
Полковник
Сообщения: 1430
Зарегистрирован: 27.03.2008
Откуда: Бацькаўшчына
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

#17 Сообщение 09.08.2010, 19:54

Так и не графические, причём тут графика, я оконное приложение делаю.
А с графикой работать может и буду, на Delphi делаю ремейк игры под дос KB2(шото типа героев), и сделал бы уже, да лень.

Аватара пользователя
GanGSISoft
Полковник
Полковник
Сообщения: 1430
Зарегистрирован: 27.03.2008
Откуда: Бацькаўшчына
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

#18 Сообщение 10.09.2010, 23:06

Вот как склеить две строки char* ? Притом нужно это проделать в Visual Studio 2008 и чтобы программа не вылетала и не выдавала предупреждений.
Встроеные функции не работают. Своя функция, где каждый символ переписывавется из строк в строку не работает.
Можно использовать char[х], но хочется знать как с char* работать.

Добавлено спустя 6 минут 4 секунды:
И как же всетаки сконвертировать число в хоть какойнибудь char

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#19 Сообщение 10.09.2010, 23:09

char * - указатель. Надеюсь ты выделил память под строку...

Код: Выделить всё

char str1[] = "Hello, ";
char str2[] = "world!";
char result[14];
strcat(result, str1);
strcat(result, str2);
printf("%s", result);
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
GanGSISoft
Полковник
Полковник
Сообщения: 1430
Зарегистрирован: 27.03.2008
Откуда: Бацькаўшчына
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

#20 Сообщение 10.09.2010, 23:47

NiGHt-LEshiY
Спасибо, но не работает.
Вообще что то не понятное получается.
Почему то если только прибавить к result str2, то выводится следующая запись <каракули+str1+str2>

Код: Выделить всё

int _tmain(int argc, _TCHAR* argv[])
{
	char s1[]="str1";
	char s2[]="str2";
	char r[14];
	strcat(r,s1);
	printf("%s",r);
	getchar();
	return 0;
}
а выводится вот что

¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦str2str1
Я искал в интернете, сам и так и эток пробовал. Несколько часов потратил и никак не получается

Lev2008
Лейтенант
Лейтенант
Сообщения: 221
Зарегистрирован: 08.11.2008

#21 Сообщение 11.09.2010, 05:22

Код: Выделить всё

char result[14];
result[0] = 0;
Программерская задачка:
Буратине дали 5 яблок. 3 яблока он съел.
Вопрос: Сколько яблок осталось у Буратино?
Думаете 2?
А вот фик вам: Неизвестно, сколько яблок было у Буратино ДО того, как ему дали 5 яблок.
Мораль: обнуляйте переменные!

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#22 Сообщение 11.09.2010, 07:13

GanGSISoft
Тогда

Код: Выделить всё

int _tmain(int argc, _TCHAR* argv[])
{
   char s1[]="str1";
   char s2[]="str2";
   char r[14];
   memset(&r[0], 0, 14*sizeof(char)); //Я знаю, что sizeof(char) = 1, но так по ГОСТу лучше.
   strcat(&r[0], &s1[0]);
   printf("%s",r);
   getchar();
   return 0;
}
И да, Lev2008, это не обнуление а, отрезание нулём. Вот memset - обнуление, если 2-ой параметр - 0.

Lev2008
Лейтенант
Лейтенант
Сообщения: 221
Зарегистрирован: 08.11.2008

#23 Сообщение 11.09.2010, 09:35

Смысла нет в мемсете в данном случае. :)

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#24 Сообщение 11.09.2010, 09:57

Еще как есть. Будешь программировать серьезные вещи - поймешь, насколько это важно.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#25 Сообщение 11.09.2010, 11:08

Lev2008 писал(а):Смысла нет в мемсете в данном случае. :)
Еще как нужно, я раньше в своих проектах тоже память не очищал, а потому часто мучился с порчей кучи.

Аватара пользователя
GanGSISoft
Полковник
Полковник
Сообщения: 1430
Зарегистрирован: 27.03.2008
Откуда: Бацькаўшчына
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

#26 Сообщение 11.09.2010, 19:35

$t@t!c_V()1D
Спасибо. Теперь работает. Этот С++ с одной стороны тоже что и Pascal, а с другой совсем другое.
Lev2008 писал(а):Смысла нет в мемсете в данном случае. :)
Ага, только если убрать memset то получается тот же бред, что и раньше. Так что без него ничего толкового щас и не выйдет.
Последний раз редактировалось GanGSISoft 11.09.2010, 19:37, всего редактировалось 1 раз.

Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#27 Сообщение 11.09.2010, 19:48

Ксчтати. вместо memset'а так же можно использовать и ZeroMemory. но это не православно.

mms://217.170.65.66/zenit
Последний раз редактировалось $t@t!c_V()1D 11.09.2010, 20:19, всего редактировалось 1 раз.
Причина: Таки да, ZeroMemory как-то слишком виндово, не?

Аватара пользователя
$t@t!c_V()1D
Разработчик
Разработчик
Сообщения: 2639
Зарегистрирован: 06.12.2007
Благодарил (а): 10 раз
Поблагодарили: 29 раз

#28 Сообщение 11.09.2010, 20:20

GanGSISoft
Си ниже, чем Delphi, он ближе к Асму. Насчёт С++ ничего однозначного сказать не могу, зависит от стиля программирования.

Lev2008
Лейтенант
Лейтенант
Сообщения: 221
Зарегистрирован: 08.11.2008

#29 Сообщение 12.09.2010, 00:48

GanGSISoft писал(а):Ага, только если убрать memset то получается тот же бред, что и раньше. Так что без него ничего толкового щас и не выйдет.
Не знаю как вы собираете, но:

Код: Выделить всё

   char s1[]="str1";
   char s2[]="str2";
   char r[14];
   strcat(r,s1);
   printf("%s",r);
   getchar();
   return 0;
Так естественно будет фигня.

Код: Выделить всё

   char s1[]="str1";
   char s2[]="str2";
   char r[14];
   r[0] = 0;
   strcat(r,s1);
   printf("%s",r);
   getchar();
   return 0;
Так, сразу работает, как и должно. memset _в данном случае_ не нужен.
Кучу можно испортить, если у вас нет проверок на размеры используемых буферов и т.п. Используйте безопасные варианты функций:

Код: Выделить всё

strcat_s(r,14,s1);
Последний раз редактировалось Lev2008 12.09.2010, 00:48, всего редактировалось 1 раз.

Аватара пользователя
GanGSISoft
Полковник
Полковник
Сообщения: 1430
Зарегистрирован: 27.03.2008
Откуда: Бацькаўшчына
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

#30 Сообщение 12.09.2010, 00:58

И всем спасибо большое. Теперь у меня каким то чудо образом стало все получатся со строками.
А в C++ нету аналогов функции pascal pos?(я её уже сам написал, но думаю стандартная(если есть) будет быстрее и лучше работать).

Ответить