функция strcat с использованием массивов символов

Целью следующего кода было создание функции strcat с использованием только базовых манипуляций с массивами. Целевой массив символов вводится пользователем, а исходный массив символов добавляется в его конец. Мой код работает в основном нормально, за исключением случайных символов, которые он выплевывает для определенных входных массивов символов. Например, если у меня есть целевой вход в виде сыра, а мой исходный — в виде бургера, результатом будет чизбургер, как и должно быть. Однако, если мой целевой вход — дракон, а мой источник — муха, стрекоза должна быть выходной. Тем не менее, вывод дается как стрекоза @. Я понятия не имею, что не так, и мне нужна помощь.

#include <iostream>
#include <string>

using namespace std;

void mystrcat ( char destination[], const char source[]);

int main(){
char source[80];
char destination[80];
cout << "Enter a word: ";
cin >> source;
cout << "\n";
cout << "Enter a second word: ";
cin >> destination;

mystrcat(destination, source);

}
void mystrcat ( char destination[], const char source[]){

int x=0;
for(int i=0; destination[i] != '\0'; i++)
{
if ( destination[i] != '\0')
{
x = x + 1;
}
}
for(int i=0; source[i] != '\0'; i++)
{
destination[i + x] = source[i];
}
cout << destination << endl;
}

0

Решение

По сути, вам просто нужно добавить нулевой символ ('\0') в конце destination массив.

Вот правильная (и немного упрощенная) реализация:

void mystrcat(char destination[], const char source[])
{
int x = 0;
while (destination[x] != '\0')
{
x++;
}
for (int i=0; source[i] != '\0'; i++)
{
destination[x++] = source[i];
}
destination[x] = '\0';
}

Но вы должны знать, что у вас нет никаких гарантий безопасности относительно размера destination массив …

0

Другие решения

Вы не завершаете строку назначения. Вам нужно добавить '\0' персонаж в конце.

0

короткий номер:

void _mystrcat_(
__in char * out,
__in char * in)
{
while (*out) out++;
do { *out++ = *in++; } while (*in);
*out = 0x0;
}
0
По вопросам рекламы [email protected]