Гость химик Опубликовано 4 Марта, 2012 в 17:22 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 17:22 Добрый день. Как скопирывать числа из одного массива в другой? Пробовал так buffer[]=abcd[]; Компилятор ругается "invalid expression". Или нужно копировать каждое значение по очереди? Как правильно? В массиве 9 чисел. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость alexakaohm Опубликовано 4 Марта, 2012 в 17:43 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 17:43 (изменено) Такая запись - buffer[] вообще используется только при объявлении массива. Вы могли еще попробовать написать так - buffer=abcd; - но это тоже не то, что нужно. Этим действием лишь присваивается адрес первого элемента массива abcd указателю на первый элемента массива buffer. Нужно так: for (uint8_t i = 0; i < 9; i++) { buffer [i] = abcd [i]; }; Изменено 4 Марта, 2012 в 17:50 пользователем alexakaohm Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 4 Марта, 2012 в 17:43 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 17:43 (изменено) Ну в цикле это понятно, но вроде как через memcpy можно это сделать за раз, но сам не пробовал. Изменено 4 Марта, 2012 в 17:45 пользователем hsl Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость alexakaohm Опубликовано 4 Марта, 2012 в 17:50 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 17:50 Ну в цикле это понятно, но вроде как через memcpy можно это сделать за раз, но сам не пробовал. А что там внутри этой библиотечной функции? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 4 Марта, 2012 в 18:33 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 18:33 Это вроде так? #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. Не нужно будет подключать лишние библиотеки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость alexakaohm Опубликовано 4 Марта, 2012 в 18:35 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 18:35 (изменено) А в Вашем случае массивы являются символьными строками? Если да, можно пропробовать так - uint8_t *temp_2 = abcd, *temp = buffer; while (*temp) { *(temp++) = *(temp_2++); }; Изменено 4 Марта, 2012 в 18:44 пользователем alexakaohm Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 4 Марта, 2012 в 19:01 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 19:01 (изменено) А в Вашем случае массивы являются символьными строками? В масив abcd[] загружается поочереди 9 шестнадцатиричных чисел. Это цифры для динамической индикации. Чтобы во время записи новых чисел в массив, если выскочит прерывание на перемещение разряда не выскакивали значения, до конца не обновленного массива - я хочу подстраховаться. По окончании записи в массив abcd[], мне нужно скопировать все числа в массив buffer[], и уже оттуда брать их для динамической индикации. Изменено 4 Марта, 2012 в 19:02 пользователем химик Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость alexakaohm Опубликовано 4 Марта, 2012 в 19:11 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 19:11 Тога используйте приведенный мной выше пример с циклом for. Вариант с while не прокатит, потому что там используется тот факт, что символьная строка заканчивается null'ом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 4 Марта, 2012 в 20:06 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 20:06 а что такое uint8_t? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость torip3ng Опубликовано 4 Марта, 2012 в 20:11 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 20:11 (изменено) unsigned int 0 до 255 1 байт Изменено 4 Марта, 2012 в 20:14 пользователем torip3ng Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость химик Опубликовано 4 Марта, 2012 в 20:20 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 20:20 (изменено) unsigned int 0 до 255 1 байт unsigned int это от 0 до 65535 - 4 байта, а вот что такое uint8_t в теле цикла фор? Изменено 4 Марта, 2012 в 20:21 пользователем химик Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость alexakaohm Опубликовано 4 Марта, 2012 в 20:28 Жалоба Поделиться Опубликовано 4 Марта, 2012 в 20:28 Беззнаковое целое, 8 бит, то бишь обычный unsigned char. Просто я привык к такой форме записи. Добавлено после раздумий: unsigned int это от 0 до 65535 - 4 байта, а вот что такое uint8_t в теле цикла фор? размер int равен машинному слову, для avr это 2 байта, а не 4. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти