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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2017, 01:14   #111
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Вот честно, несете Вы херню, при этом не понимаете где и какую. Поэтому ответить нормально Вам не получится.
А по моему, её несёте вы. Потому что вам сказать нечего кроме strcat и string. Мне плевать на переносимость в двоичном виде и прочее! Мне 2 строки склеить надо! И всё!
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 01:15   #112
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
и при всём этом она мне подходит больше, чем strcat.
Потому что strcat выполняет другую задачу. И снова неожиданность, да? )))

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Только потому, что не требует ничего выделять.
Я привел пример использования Вашей функции - несколько последовательных сложений. Организуйте это правильно. Пригодилась Вам Ваша функция при этом?

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

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Мне плевать на переносимость в двоичном виде и прочее! Мне 2 строки склеить надо! И всё!
Ну Вы их склеили, дальше что? Зачем херню нести о Боре и подобном? получили желаемый результат? В чем тогда дело? Вам уже всё написали. Если Вы ничего не поняли, потом дойдет, со временем и опытом. Говорить на своем одном "hello word" за все остальные use-case'ы не надо. )))

Последний раз редактировалось Croessmah; 28.06.2017 в 01:19.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 01:17   #114
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
А по моему, её несёте вы. Потому что вам сказать нечего кроме strcat и string. Мне плевать на переносимость в двоичном виде и прочее! Мне 2 строки склеить надо! И всё!
Так чем вас это не устраивает?
Код:
la = strlen(a);
lb = strlen(b);
c = new char[la + lb + 1];
strcat(c, a); strcat(c+la, b);
....

delete []c;
Можно так:

Код:
#define CAT(a, b, c) {int la = strlen(a); int lb = strlen(b); c = new char[la + lb + 1]; strcat(c, a); strcat(c+la, b);}
....

char* str;
CAT(a,b,str);
delete []str;

Последний раз редактировалось alexzk; 28.06.2017 в 01:19.
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 01:21   #115
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Так чем вас это не устраивает?
Наверное тем, что strcat может быть в разы быстрее его велосипеда, т.к. может использовать множество возможностей, недоступных для обычного пользователя компилятора.
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 02:27   #116
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Так чем вас это не устраивает?
Код:

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

delete []c;
1. Написал вот так:
Код:
#include <iostream>
using namespace std;
int main()
{
	char* a = "blabla";
	char* b = "BLABLA";
	auto la = strlen(a);
	auto lb = strlen(b);
	char* c = new char[la + lb + 1];
	strcat(c, a);
	strcat(c + la, b);
	cout << c << endl;
	delete[] c;
	system("pause");
	return 0;
}
2. Забил на warningи, которые выдает компилятор.
3. Скомпилированная программа выдает ошибку в любом случае, иногда сразу. В основном, выдает результат типа такого:
Безымянный.png
Но, если повезёт, может выдать и правильный результат (и всё равно выдаст ошибку).
4. Если и удастся заставить это работать, упадет на big-endian.
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Наверное тем, что strcat может быть в разы быстрее его велосипеда, т.к. может использовать множество возможностей, недоступных для обычного пользователя компилятора.
С этим я и не спорю. Рабочий код с участием strcat меня бы почти устроил, хоть и не хочется warningи.

Последний раз редактировалось bugaboo; 28.06.2017 в 02:35.
bugaboo вне форума Ответить с цитированием
Старый 28.06.2017, 02:39   #117
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Если и удастся заставить это работать, упадет на big-endian.
Не упадет. Порядок байт здесь не важен.

Цитата:
Сообщение от bugaboo Посмотреть сообщение
Забил на warningи, которые выдает компилятор.
Код:
const char* a = "blabla";
const char* b = "BLABLA";
Цитата:
Сообщение от bugaboo Посмотреть сообщение
Скомпилированная программа выдает ошибку в любом случае
Код:
char* c = new char[la + lb + 1];
*c = 0;
//...
или
Код:
char* c = new char[la + lb + 1];
strcpy(c, a);
strcpy(c + la, b);
//...

Последний раз редактировалось Croessmah; 28.06.2017 в 03:09. Причина: подправил, а то ведь перепишут не подумав )))
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 03:02   #118
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

...блин, писал это cat и думал, чтож меня так смущает?) strcpy же ))
...нада на форум внедрить компилятор )
alexzk вне форума Ответить с цитированием
Старый 28.06.2017, 03:11   #119
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
нада на форум внедрить компилятор
Не надо. Поломают же. )))
Croessmah вне форума Ответить с цитированием
Старый 28.06.2017, 03:17   #120
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 55
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Не упадет. Порядок байт здесь не важен.
Вот в этом месте и правда удивительно, щас попробую на спарке.
Код работает:
Код:
#include <iostream>
using namespace std;
int main()
{
	const char* a = "blabla";
	auto la = strlen(a);
	const char* b = new char[la + 1];
	b = "BLABLA";
	auto lb = strlen(b);
	char* c = new char[la + lb + 1];
	strcpy(c, a);
	strcat(c + la, b);
	cout << c << endl;
	delete[] c;
	system("pause");
	return 0;
}
Конечно, constы напрягают, ну и ладно, пару лишних переменных придется где-то задать.
И даже не важно, что у меня в конструкторе, чтобы записать в один массив конкантенацию 2-х других будет городулька из 12 строк.
Наверно, именно так выглядит ответ на вопрос "Как склеить 2 массива char*?"
Но Warningи всё равно остались...

Последний раз редактировалось bugaboo; 28.06.2017 в 03:20.
bugaboo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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