Копирование из одного массива в другой - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Знаю два варианта копирования из одного массива в другой 1. С помощью функции memcpy
char src[6] = "Hello";
char dst[6] = "";
memcpy(dst, src, 6);
2. С помощью цикла подставлять значение из одного массива в другой
void copy(char to[], char from[])
{
    int i = 0;
    while ((to[i] = from[i]) != '\0') i++;
}
char to[6];
char *from = "Hello";
copy(to, from);
Какой из способов наиболее эффективный и почему? Так же интересует почему изменения в функции copy над переменными to и from влияют на значения переменных с такими же именами которые находятся за пределами этой функции? Ведь в Си аргументы передаются по значению, если явно не использовать указатель? И еще пара вопросов: 1. Почему при создании

указателя

можно не указывать размер массива а сразу заполнять его символами в двойных кавычках? Например char *from = "Hello"; Чем отличается такая запись от явного указания длины с массивом? Правильно ли я понимаю, что запись char *from = "Hello"; является упрощенной версией как если бы мы использовали malloc? 2. Если явно не написать \0 в конце строки, то добавляется ли этот символ автоматически?

Решение задачи: «Копирование из одного массива в другой»

textual
Листинг программы
struct array
{
    char a[256];    
};
 
struct array m_cpy(struct array arr)
{
    return arr;
}
 
int main(void) 
{
    struct array a = {{0}}, a2;
    
    a2 = m_cpy(a);
    
    return 0;
}

Объяснение кода листинга программы

  1. Структура array объявлена с полем a типа char с размером 256 байт.
  2. Функция m_cpy принимает в качестве аргумента структуру array и возвращает ее.
  3. В функции main объявлены две переменные типа array: a и a2.
  4. Инициализируется переменная a значением {{0}} (все 256 байт равны 0).
  5. Переменная a2 инициализируется результатом вызова функции m_cpy с аргументом a.
  6. Программа возвращает 0, что означает успешный конец работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы