Вопрос-Ответ (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 стейтменте между { }, то при завершенни этого стейтмента она автоматически удалится?
|
|
| |