Я написал функцию для реализации тетсруЧто случилось с моей memcpy?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
char *memcpy(char *dest,char *src,int n){
char *ch=dest;
while (n--)
*ch++=*src++;
return dest;
}
int main(){
char *src="georgia";
int n=strlen(src);
char *dest=new char[n];
std::cout<<*memcpy(dest,src,n)<<std::endl;
return 0;
}
Но он печатает только один g
. Зачем?
Не нужно копировать 'dest' в' ch', просто используйте его так же, как вы используете 'n'. Строки в C++ должны указывать на 'const char *', поэтому: 'const char * src =" georgia ";'. Длина строки не может быть отрицательной, и поэтому результат 'strlen' является неподписанным типом, а именно' size_t'. Поэтому не используйте 'int n', а' size_t n'. (Это также относится к количеству копируемых байтов, отрицательный - бессмысленному, используйте подписанный тип.) Никогда не выполняйте ручное распределение! Вы утечка 'dest'; используйте «std :: vector» вместо динамических массивов, поэтому вы никогда не сможете просочиться. В будущем выньте посторонние пробелы. :) – GManNickG
@GMan: Если OP хочет вернуть 'dest', он не может его модифицировать (отсюда и необходимость' ch'). Кроме этого я согласен на 100%. –
@ Джеймс: Ну держи меня. Удерживайте 'ch'. :) – GManNickG