Копировать строку без strcpy - PullRequest
0 голосов
/ 28 февраля 2019
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *str, *temp;
    str = malloc(sizeof(char) * 100);
    fgets(str, 100, stdin);
    temp = str;
    printf("%s", str);
    return 0;
}

Это допустимый код для копирования одной строки в другую без использования функции strcpy()?

1 Ответ

0 голосов
/ 28 февраля 2019

Вы просто копируете начальный адрес str в temp.Это означает, что любые изменения в temp будут отражены и в str, поскольку они указывают на одну и ту же память.Он не эмулирует strcpy(dest, src), что создает отдельную копию строки с нулевым символом в конце, на которую указывает src, начиная с ячейки памяти, на которую указывает dest.

Итак, чтобы ответить на ваш вопрос как на вопрос: нет.

Если вы намерены избежать времени выполнения O (n), равного strcpy, это также то, что вы не можете сделать на самом деле.

Если для выполнения программного задания, эквивалентного strcpy, вам требуется программирующее задание или упражнение, вот высокоуровневое описание используемого им алгоритма:

  1. Скопируйте символ в *source to *destination
  2. Если только что скопированный символ был нулевым терминатором, выйдите из него.
  3. В противном случае увеличьте указатель до source и увеличьте указатель до destination.
  4. Перейти к шагу 1.
...