Целью следующего кода было создание функции 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'
) в конце 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'
персонаж в конце.
короткий номер:
void _mystrcat_(
__in char * out,
__in char * in)
{
while (*out) out++;
do { *out++ = *in++; } while (*in);
*out = 0x0;
}