Задать вопрос
@nikitosssguy

Реализация аналога strcat() на c++

Здравствуйте. Я начинающий в c++ программировании, и в обучающей литературе встретил задачу написать свой аналог функции strcat(). Я принял вызов, и вот что получилось:
#include <iostream>
#include <cstdio>
#include "stdafx.h"
#include "conio.h"

using namespace std;

void add(char *some, char *some2);
int main(){
	setlocale(0, "");
	char some[80] = "Слово";
	char some2[80] = "Второе";
	add(some, some2);
	cout << some << "\n";
	system("pause");
	return 0;
}
void add(char *some, char *some2){
	int first_length = strlen(some);
	for (int i = 0; i < strlen(some2); i++){
		*(some + first_length + i) = *(some2 + i);
	}
}

Хотелось бы узнать:
1)Насколько нормальным является мое решение с точки зрения производительности
2)Как можно сделать его короче и быстрее
3)Да и вообще ошибки, допущенные мной.
Заранее спасибо за ответы.
  • Вопрос задан
  • 5985 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Огромный минус - а что будет, если длина some 79 символов? Куда будет копироваться some2?
Второй огромный минус - а какая будет длина строки в приведённом примере после конкатенации?
Вы не записали хвостовой 0 в результирующую строку.
Большой минус - перевычисление указателей и длины some2 в каждой итерации цикла. Исходные значения надо рассчитывать до цикла, в цикле делать только инкремент/декремент.
Маленький минус - нет смысла считать длину some2. Достаточно просто идти до символа с кодом 0.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы