На недавнем собеседовании меня попросили реализовать собственную функцию копирования строк. Мне удалось написать код, который, я считаю, работает до определенной степени. Однако когда я вернулся домой, чтобы снова попробовать проблему, я понял, что это намного сложнее, чем я думал. Вот код, который я придумал:
#include <stdio.h>
#include <stdlib.h>
char * mycpy(char * d, char * s);
int main() {
int i;
char buffer[1];
mycpy(buffer, "hello world\n");
printf("%s", buffer);
return 0;
}
char * mycpy (char * destination, char * source) {
if (!destination || !source) return NULL;
char * tmp = destination;
while (*destination != NULL || *source != NULL) {
*destination = *source;
destination++;
source++;
}
return tmp;
}
Я просмотрел некоторые другие примеры в Интернете и обнаружил, что, поскольку все строки в C заканчиваются нулем, мне нужно было прочитать нулевой символ, а затем добавить нулевой символ в строку назначения перед выходом.
Однако одна вещь, которая меня интересует, это то, как обрабатывается память. Я заметил, что если бы я использовал библиотечную функцию strcpy (), я мог бы скопировать строку из 10 символов в массив символов размера 1. Как это возможно? Функция strcpy () каким-то образом выделяет больше памяти для назначения?