Копирование из одного массива в другой - C (СИ)
Формулировка задачи:
Знаю два варианта копирования из одного массива в другой
1. С помощью функции memcpy
2. С помощью цикла подставлять значение из одного массива в другой
Какой из способов наиболее эффективный и почему?
Так же интересует почему изменения в функции copy над переменными to и from влияют на значения переменных с такими же именами которые находятся за пределами этой функции? Ведь в Си аргументы передаются по значению, если явно не использовать указатель?
И еще пара вопросов:
1. Почему при создании
char src[6] = "Hello"; char dst[6] = ""; memcpy(dst, src, 6);
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);
указателя
можно не указывать размер массива а сразу заполнять его символами в двойных кавычках? Например 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; }
Объяснение кода листинга программы
- Структура
array
объявлена с полемa
типаchar
с размером 256 байт. - Функция
m_cpy
принимает в качестве аргумента структуруarray
и возвращает ее. - В функции
main
объявлены две переменные типаarray
:a
иa2
. - Инициализируется переменная
a
значением {{0}} (все 256 байт равны 0). - Переменная
a2
инициализируется результатом вызова функцииm_cpy
с аргументомa
. - Программа возвращает 0, что означает успешный конец работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д