Копирование из одного массива в другой - 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, что означает успешный конец работы.