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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2017, 00:56   #101
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
и библиотека может быть использована из другого компилера.
Тогда std::string не спасет, придется перекомпилировать код.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 01:00   #102
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
В общем, все возражения сводятся к тому, что я не имею права сделать как мне надо, а должен делать так, как надо c++. Неудивительно, что люди уходят в питоны, джавы и т.д. Они хотят фантазировать и делать так, как надо им.
А как бы решил задачу c++ник? Выделил бы "Боре" 1000 байт и молился, чтобы ему хватило?
Вообще есть стандартное поведение при аллокации. Даже в яве, если не хватает памяти, то след. выделение делаем х1.5 (или х2). Если посмотреть код явы, там так и работает.

Т.е. определяем длину "Боря", и сохраняем. При запросе "Петя", выделяем уже +2 длины "Петя", копируем в новое выделение старое значение + "Петя". Если программист знает, что таких мелких выделений будет дофига, то у всех контейнеров (std:;string, std::vector, в яве у всех) есть метод reserve, который сразу аллоцирует. Так же программист может и коэфициент задавать, но х1.5 (помоему) самый эффективный, как показывает практика.
Но заметьте - это все классы, которые сами себя рулят. В процедурном стиле (не ООП) так не делается, он "вывернут" относительно ООП. В процедурном strcat верный вариант.

Последний раз редактировалось alexzk; 28.06.2017 в 01:03.
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 01:01   #103
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Зачем в таком случае людям мозг парите? Как надо тогда, так и делайте.
Вам говорят как сделать, чтобы уменьшить себе в будущем количество анальных ласк.
мы находимся в теме "Сложить два массива char'ов и не только", я сюда пришел посмотреть как люди делают и мне ничего не подошло. Но изначально речь идет о 2х массивах, и мне было бы достаточно 2.
2 С-строки есть у меня! Сколько выделять под результат я не знаю! Что конкретно вы можете предложить в моей ситуации, лучше, чем выделить 1000000 байт?
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 01:02   #104
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
В общем, все возражения сводятся к том
Что эта функция практически не юзабельна. Я предложил реализовать указанную задачу. Видимо, не получилось. ЧТД. )))

Цитата:
Сообщение от bugaboo Посмотреть сообщение
что я не имею права сделать как мне надо
Тогда зачем спрашивать советов? Делайте. Только потом плакать не надо.

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Неудивительно, что люди уходят в питоны, джавы и т.д.
Конечно. Для тупого юзера там уже всё готово. Как правило, этот тупой юзер там тоже всё неправильно использует у них ничего не работает или тупит всё, и они идут куда-нибудь на VB, с которым история повторяется, но пенсия уже скоро. )))

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Они хотят фантазировать и делать так, как надо им.
И в этом у C и C++ конкурентов нет. )))

Цитата:
Сообщение от bugaboo Посмотреть сообщение
А как бы решил задачу c++ник? Выделил бы "Боре" 1000 байт и молился, чтобы ему хватило?
Ахахахах, так ничего и не поняли Вы из сказанного. Ну ок, живите в своём мире дальше.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 01:05   #105
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Т.е. определяем длину "Боря", и сохраняем. При запросе "Петя", выделяем уже +2 длины "Петя", копируем в новое выделение старое значение + "Петя". Если программист знает, что таких мелких выделений будет дофига, то у всех контейнеров (std:;string, std::vector, в яве у всех) есть метод reserve, который сразу аллоцирует. Так же программист может и коэфициент задавать, но х1.5 (помоему) самый эффективный, как показывает практика.
Статический массив так не выделишь, динамический в strcat не влезет
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 01:06   #106
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Но изначально речь идет о 2х массивах, и мне было бы достаточно 2.
Тогда зачем Вам такая функция, если она используется только один раз и в одном месте? Или она и в других местах используется? Так значит уже может быть что угодно дальше. Мы понятия не имеем что там Вам надо, мы Вам про общий случай с возможностью использования где-то еще. Ваша функция
1) Непереносима в двоичном виде
2) Не удобна в использовании
3) При неправильном использовании может привести к утечке памяти
4) Требует крайне аккуратного использования при последовательных вызовах
5) Невозможно использовать готовый буфер
6) Невозможно эффективно сложить несколько строк
7) Еще можно накопать

Хотите с этим в результате миловаться? Пожалуйста, C и C++ Вам это позволяют.
Ведь именно так Вы хотите сделать. Это же Вы написали то, что имеет такие последствия.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 01:08   #107
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Ахахахах, так ничего и не поняли Вы из сказанного. Ну ок, живите в своём мире дальше.
Ответьте мне пожалуйста на ответ! Сколько мне конкретно выделять Боре места, и каким образом?
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 01:10   #108
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Сколько мне конкретно выделять Боре места, и каким образом?
Вам виднее. Вы же с Борей не поладили.
Цитата:
Сообщение от bugaboo Посмотреть сообщение
Ответьте мне пожалуйста на ответ!
Вот честно, несете Вы херню, при этом не понимаете где и какую.
Поэтому ответить нормально Вам не получится.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 01:11   #109
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
1) Непереносима в двоичном виде
2) Не удобна в использовании
3) При неправильном использовании может привести к утечке памяти
4) Требует крайне аккуратного использования при последовательных вызовах
5) Невозможно использовать готовый буфер
6) Невозможно эффективно сложить несколько строк
7) Еще можно накопать
и при всём этом она мне подходит больше, чем strcat. Только потому, что не требует ничего выделять. Но даже если бы я от неё отказался в пользу strncat или типа того - сколько выделять то?
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 01:13   #110
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Код:

la = strlen(a);
lb = strlen(b);
c = new char[la + lb + 1];
strcat(c, a); strcat(c+la, b);
....

delete []c;
alexzk вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MMX сложить два числа gansm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 29.10.2010 05:16
как сложить два числа с плавающей точкой forsy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 19 29.03.2010 02:15
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 22:02
Сложить два числа и вывести результат на экран We1c0m3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.05.2009 11:41
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27