Перейти к содержанию

Копирование массива


Рекомендуемые сообщения

Добрый день. Как скопирывать числа из одного массива в другой?

Пробовал так

buffer[]=abcd[];

Компилятор ругается "invalid expression".

Или нужно копировать каждое значение по очереди?

Как правильно?

В массиве 9 чисел.

Ссылка на комментарий
Поделиться на другие сайты

Такая запись -

buffer[]

вообще используется только при объявлении массива.

Вы могли еще попробовать написать так -

buffer=abcd;

- но это тоже не то, что нужно. Этим действием лишь присваивается адрес первого элемента массива abcd указателю на первый элемента массива buffer.

Нужно так:

for (uint8_t i = 0; i < 9; i++) {
buffer [i] = abcd [i];
};

Изменено пользователем alexakaohm
Ссылка на комментарий
Поделиться на другие сайты

Ну в цикле это понятно, но вроде как через memcpy можно это сделать за раз, но сам не пробовал.

Изменено пользователем hsl
Ссылка на комментарий
Поделиться на другие сайты

Ну в цикле это понятно, но вроде как через memcpy можно это сделать за раз, но сам не пробовал.

А что там внутри этой библиотечной функции?

Ссылка на комментарий
Поделиться на другие сайты

Это вроде так?

#include <stdio.h>
#include <string.h>

#define SIZE 80

int main(void)
{
 char buf1[SIZE], buf2[SIZE];

 strcpy(buf1, "Когда, в случае если...");
 memcpy(buf2, buf1, SIZE);
 printf(buf2);

 return 0;
}

Тогда наверное удобней будет через for. Не нужно будет подключать лишние библиотеки.

Ссылка на комментарий
Поделиться на другие сайты

А в Вашем случае массивы являются символьными строками?

Если да, можно пропробовать так -

uint8_t *temp_2 = abcd, *temp = buffer; 
while (*temp) {
*(temp++) = *(temp_2++);
};

Изменено пользователем alexakaohm
Ссылка на комментарий
Поделиться на другие сайты

А в Вашем случае массивы являются символьными строками?

В масив abcd[] загружается поочереди 9 шестнадцатиричных чисел. Это цифры для динамической индикации. Чтобы во время записи новых чисел в массив, если выскочит прерывание на перемещение разряда не выскакивали значения, до конца не обновленного массива - я хочу подстраховаться. По окончании записи в массив abcd[], мне нужно скопировать все числа в массив buffer[], и уже оттуда брать их для динамической индикации.

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

Тога используйте приведенный мной выше пример с циклом for.

Вариант с while не прокатит, потому что там используется тот факт, что символьная строка заканчивается null'ом.

Ссылка на комментарий
Поделиться на другие сайты

unsigned int 0 до 255 1 байт

unsigned int это от 0 до 65535 - 4 байта, а вот что такое uint8_t в теле цикла фор?

Изменено пользователем химик
Ссылка на комментарий
Поделиться на другие сайты

Беззнаковое целое, 8 бит, то бишь обычный unsigned char.

Просто я привык к такой форме записи.

 

Добавлено после раздумий:

unsigned int это от 0 до 65535 - 4 байта, а вот что такое uint8_t в теле цикла фор?

размер int равен машинному слову, для avr это 2 байта, а не 4.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...