| Вопрос-Ответ (C++) | 
|  | 
| 
| Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |  |   The Witcher Сейчас нет на сайте | Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь. 
 Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
 |  |  |  |  | 
| 
| BIOMSoft | Дата: Четверг, 23 Февраля 2012, 11:32 | Сообщение # 101 |  | участник Сейчас нет на сайте | Gavolot, - Справка есть! Там все   
 Перевод UDK - Завершено 30%
 Перевод UDK документации - Завершено 2%
 |  |  |  |  | 
| 
| Gavolot | Дата: Понедельник, 27 Февраля 2012, 22:05 | Сообщение # 102 |  |   Последователь Тени Сейчас нет на сайте | Вопрос такой, там в книге говорили типо для проверки своих знаний написать свои strcat или strcpy, я пошел дальше и даже написал strcmp, проблема в том, что я не могу реализовать именно strcat(to,from) т.е. алгоритм таков, нужно строку from запихать в конец строки to. А я вот хоть убейте не могу этого сделать, пытался сделать + и тоже не получилось, вот как я танцевал в течении трех дней и выдает какие-то эироглифы: 
 Code //Функция для присоединения строки_1 в конец строки_2 void myStrCat(char *str1,char *str2)
 {
 int i;
 char *p;
 p = &str2[0];
 for(i=0;*p;i++) p = &str2[i];
 p[i+1] = str1[0];
 for(i=0;*p;i++);
 }
 
Я там много чего пытался сделать, это уже просто последнее до чего голова дошла)) Просто при сравнении строк мне помогли внутренние указатели, а вот тут нечего не помогает, там где надо лишь копировать строку все просто, а вот тут надо присоединить строку в конец. Я пытался сделать не много удобнее для себя, присоединить str1 к str2, просто для меня присоединение слева на право лучше читается. Я думал допру сам, но за 3 дня так и не допер и решил не тратить пока время на это и изучать язык дальше.
 
 
 Quote Gavolot, - Справка есть! Там все Если бы знал английский, с удовольствием почитал бы.
 
 В общем что-то делаю, но пока не пойму ни как :)
 Тень - выражение основной сущности человека.
 
   
 
 Сообщение отредактировал Gavolot - Понедельник, 27 Февраля 2012, 22:16 |  |  |  |  | 
| 
| Demeron | Дата: Понедельник, 27 Февраля 2012, 22:17 | Сообщение # 103 |  |   User created in C++ Сейчас нет на сайте | Gavolot, пишу без редактора, так что если что сам поправишь: 
 Code  char* strcpy2(char* s1,char* s2)
 {
 int l1=strlen(s1);
 int l2=strlen(s2);
 char* res;
 
 int x=0;
 
 res=new char[l1+l2+1];
 
 for (int i=0;i<l1;i++)
 {
 res[x]=s1[i];
 x++;
 }
 
 for (int i=0;i<l2;i++)
 {
 res[x]=s2[i];
 x++;
 }
 
 res[x]='\0';
 
 return res;
 }
 
 
 Сообщение отредактировал Demeron - Понедельник, 27 Февраля 2012, 22:18 |  |  |  |  | 
| 
| Gavolot | Дата: Понедельник, 27 Февраля 2012, 22:33 | Сообщение # 104 |  |   Последователь Тени Сейчас нет на сайте | Demeron, спасибо за помощь, работает. Я правда не много по другому сделал, но зато мысль понял)) Я еще пока просто путаюсь. К нулевому символу в конце строки пока еще привыкаю, особенно к тому, что в не которых ситуациях его надо ставить самому. 
 В общем что-то делаю, но пока не пойму ни как :)
 Тень - выражение основной сущности человека.
 
   |  |  |  |  | 
| 
| Rorschach | Дата: Вторник, 28 Февраля 2012, 19:35 | Сообщение # 105 |  |   участник Сейчас нет на сайте | Code char* strcpy2(char* s1,char* s2)  {
 int l1=strlen(s1);
 int l2=strlen(s2);
 char* res;
 
 int x=0;
 
 res=new char[l1+l2+1];
 
 for (int i=0;i<l1;i++)
 {
 res[x]=s1[i];
 x++;
 }
 
 for (int i=0;i<l2;i++)
 {
 res[x]=s2[i];
 x++;
 }
 
 res[x]='\0';
 
 return res;
 }
 
Ну и программисты.
 
 Never compromise. Not even in the face of Armageddon.
 |  |  |  |  | 
| 
| ilya7834 | Дата: Вторник, 28 Февраля 2012, 21:54 | Сообщение # 106 |  |   Работаю на Irrlicht Engine Сейчас нет на сайте | кто-нибудь работал Ultimate++? Не подскажете, как подключить к нему компилятор.   
 На синем небе
 Попробуй-ка разглядеть
 Синюю звезду
 |  |  |  |  | 
| 
| Demeron | Дата: Вторник, 28 Февраля 2012, 22:19 | Сообщение # 107 |  |   User created in C++ Сейчас нет на сайте | Quote (Rorschach) Ну и программисты. мм... что-то не так?) не нравиться вариант "в лоб"?)
 |  |  |  |  | 
| 
| Rorschach | Дата: Вторник, 28 Февраля 2012, 22:25 | Сообщение # 108 |  |   участник Сейчас нет на сайте | Quote мм... что-то не так?) не нравиться вариант "в лоб"?)Функция называется strcpy, а делает strcat. И зачем-то выделяет память в куче и возвращает поинтер на нее. Вообще настолько бредовую реализацию придумать - это талант.
 
 Never compromise. Not even in the face of Armageddon.
 |  |  |  |  | 
| 
| Demeron | Дата: Вторник, 28 Февраля 2012, 22:37 | Сообщение # 109 |  |   User created in C++ Сейчас нет на сайте | Quote (Rorschach) Функция называется strcpy, а делает strcat. И зачем-то выделяет память в куче и возвращает поинтер на нее. Вообще настолько бредовую реализацию придумать - это талант. хм... ну то я попутал немного)) думаю, так лучше будет?
 
 Code char* my_strcpy(char* to,char* from) {
 int s1;
 s1=sizeof(from);
 
 to=(char*)realloc(to,s1);
 
 memcpy(&to[0],&from[0],s1);
 return to;
 }
 
 
 Сообщение отредактировал Demeron - Вторник, 28 Февраля 2012, 23:10 |  |  |  |  | 
| 
| Rorschach | Дата: Вторник, 28 Февраля 2012, 22:50 | Сообщение # 110 |  |   участник Сейчас нет на сайте | Quote думаю, так лучше будет?Насчет лучше или хуже не знаю, но работать оно точно не будет. Сам подумай, если в твои функции передать указатели на буферы выделенные в стековой памяти, то realloc идет лесом, кроме того sizeof в любом случае будет возвращать 4(на x64 8).
 
 Never compromise. Not even in the face of Armageddon.
 
 
 Сообщение отредактировал Rorschach - Вторник, 28 Февраля 2012, 22:53 |  |  |  |  | 
| 
| Demeron | Дата: Вторник, 28 Февраля 2012, 22:59 | Сообщение # 111 |  |   User created in C++ Сейчас нет на сайте | Quote (Rorschach) Насчет лучше или хуже не знаю, но работать оно точно не будет. Сам подумай, если в твои функции передать указатели на буферы выделенные в стековой памяти, то realloc идет лесом, кроме того sizeof в любом случае будет возвращать 4(на x64 8). если я не ошибаюсь, будет возвращать количество символов * 4 (количество бит), а realloc работает с битами.
 
 
 Code char* str=NULL; char aaa[]="sample text...\0";
 
 str=my_strcpy(str,aaa);//в str будет текст из aaa
 
 
 Сообщение отредактировал Demeron - Вторник, 28 Февраля 2012, 23:10 |  |  |  |  | 
| 
| Stage | Дата: Среда, 29 Февраля 2012, 00:46 | Сообщение # 112 |  | постоянный участник Сейчас нет на сайте | Quote если я не ошибаюсь, будет возвращать количество символов * 4 (количество бит), а realloc работает с битами.Байты.
 |  |  |  |  | 
| 
| Rorschach | Дата: Среда, 29 Февраля 2012, 09:32 | Сообщение # 113 |  |   участник Сейчас нет на сайте | sizeof вернет размер указателя. 
 Never compromise. Not even in the face of Armageddon.
 |  |  |  |  | 
| 
| Нохчи | Дата: Вторник, 06 Марта 2012, 23:25 | Сообщение # 114 |  | заслуженный участник Сейчас нет на сайте | Я бы так написал: 
 Code  char *my_strcat(char *str1, char *str2)
 {
 char *tmp = str1;
 while(*tmp) tmp++;
 while(*tmp++ = *str2++);
 return str1;
 }
 
 Многие вопросы по Windows отпадут, если посмотреть тут
 |  |  |  |  | 
| 
| clidi | Дата: Четверг, 08 Марта 2012, 18:25 | Сообщение # 115 |  | почетный гость Сейчас нет на сайте | Проблема с массивом для кнопок. Есть массив bool keys[256];. Он хранится в фаиле с WinMain методом. Также есть другои класс и ему нужен доступ к этому массиву. Никак не получается это сделать =( Если оставить декларацию в main, то массив не виден в другом классе, если сделать декларацию в другом классе и написать include в main, то пишет что массив уже задекларирован, хотя это не так. Помогите пожалуйста. |  |  |  |  | 
| 
| Нохчи | Дата: Четверг, 08 Марта 2012, 18:29 | Сообщение # 116 |  | заслуженный участник Сейчас нет на сайте | В другом файле(.cpp, а не .hpp) пиши extern bool *keys 
 Многие вопросы по Windows отпадут, если посмотреть тут
 |  |  |  |  | 
| 
| Demeron | Дата: Четверг, 08 Марта 2012, 20:13 | Сообщение # 117 |  |   User created in C++ Сейчас нет на сайте | Quote (clidi) Проблема с массивом для кнопок. Есть массив bool keys[256];. Он хранится в фаиле с WinMain методом. Также есть другои класс и ему нужен доступ к этому массиву. Никак не получается это сделать =( Если оставить декларацию в main, то массив не виден в другом классе, если сделать декларацию в другом классе и написать include в main, то пишет что массив уже задекларирован, хотя это не так. Помогите пожалуйста.В .h файле прописываем extern bool keys[256];
 В .cpp файле прописываем bool keys[256]; (только в одном cpp файле).
 Подключаем .h файл там, где нужна переменная keys.
 
 
 Сообщение отредактировал Demeron - Четверг, 08 Марта 2012, 20:14 |  |  |  |  | 
| 
| Нохчи | Дата: Четверг, 08 Марта 2012, 20:24 | Сообщение # 118 |  | заслуженный участник Сейчас нет на сайте | Quote (Demeron) В .h файле прописываем extern bool keys[256];extern`ы пишутся не в хедерах. Если такой хедер подключить к разным .cpp, будет матюгаться по-черному.
 UPD: Хотя нет, я не прав.
 
 Многие вопросы по Windows отпадут, если посмотреть тут
 
 
 Сообщение отредактировал Нохчи - Четверг, 08 Марта 2012, 20:29 |  |  |  |  | 
| 
| Demeron | Дата: Четверг, 08 Марта 2012, 20:28 | Сообщение # 119 |  |   User created in C++ Сейчас нет на сайте | Quote (Нохчи) extern`ы пишутся не в хедерах. Если такой хедер подключить к разным .cpp, будет матюгаться по-черному.у меня variable.h с 30-40 переменными подключен к 20 .cpp файлов, и почему-то все работает, как в VS, так и в C::B.
 |  |  |  |  | 
| 
| clidi | Дата: Четверг, 08 Марта 2012, 21:10 | Сообщение # 120 |  | почетный гость Сейчас нет на сайте | Маленький вопрос. Если у меня например есть переменная int x = 1; в if стейтменте между { }, то при завершенни этого стейтмента она автоматически удалится? |  |  |  |  |