Пятница, 29 Марта 2024, 17:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
BIOMSoftДата: Четверг, 23 Февраля 2012, 11:32 | Сообщение # 101
участник
Сейчас нет на сайте
Gavolot, - Справка есть! Там все happy

Перевод 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++? Не подскажете, как подключить к нему компилятор. cry

На синем небе
Попробуй-ка разглядеть
Синюю звезду
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 стейтменте между { }, то при завершенни этого стейтмента она автоматически удалится?
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг