Помогите с char* массивом
- Войдите на сайт для отправки комментариев
Втр, 25/09/2012 - 01:25
char* filecat[]={"sys123456700", "sys123456701", "sys123456702", "sys123456703", "sys123456704", "sys123456705", "sys123456706"}; File dir=SD.open("/"); //Чтение каталога dir.rewindDirectory(); key=0; while(true) { file = dir.openNextFile(); //Переход к следующему файлу if (!file) {// Больше файлов не осталось и выход goto menuself1;} filecat[key]=file.name(); //Присвоить элементу массива имя файла key++; } menuself1: delay(1000);
Помогите разобраться. Мне надо массив filecat[]; заполнить именами файлов с флешкарты, чтоб в дальнейшем из массива можно было достать имя файла по его номеру. После выполнения этой программы весь массив оказывается заполненным именем последнего файла. Имена файлов с карты читаются без проблем. Как нормально создать и заполнить такой массив? Помогите кто силен в этом или сталкивался с этой проблеммой.
вообще не особо знаком в работе с флешками но из знаний синтекса си,знаю что нельзя присваивать строку строке то есть
для присвоения-переписи массива символов массиву символов исползьуеться :
в вашем случае :
Большое спасибо, за оперативный ответ. Супер, у меня всё заработало, но я не совсем понял как работает оператор strcpy. Среди списка команд arduino я его не нашёл. Приблизительно я понял так переменная file.name() замещает переменную filecat[key] в позиции key, но почему нельзя напрямую в позицию key записать значение переменной file.name() оператором присвоения. Ведь filecat[key] это массив из которого можно читать элементы, почему в него нельзя их записать (тоесть присвоить элементу массива значение)?
Большое спасибо, за оперативный ответ. Супер, у меня всё заработало, но я не совсем понял как работает оператор strcpy. Среди списка команд arduino я его не нашёл.
Ищите ее в справочниках по языку C/C++ (ардуино - это некий их "огрызок").
Ведь filecat[key] это массив из которого можно читать элементы
Да... только зайдатесь вопросом "массив чего"? Какого типа элементы? Ведь это не "массив строк", а массив "указателей на строки".
Вот вы напрямую сохранили ссылку на строку туда в массив, а при следующем вызове ваше file.name() - поменяло что хранится по этому адресу памяти. То есть смотрите. file.name() - возвращают не строку, а адресс где лежит строка. И вы его запомнили в массив. Адресс. А она пошла пользоватся дальше этим куском памяти. И на этот адресс - загрузила новое имя. Соотвественно ваша ссылка, сохраненная в массиве - указывает, теперь, на новое имя файла. Жилец по этому адресу поменялся :)
А с strcpy, вы, фактически, взяли и сняли копию со строки. Сделали "ксерокопию" жильца и сохранили в собственной кладовке :) Ссылку на которую, теперь - имеете только вы. И значит - ее никто не поменяет (кроме вас).
Вообщем берите какой-нибудь учебник по C и вчитывайтесь в строки/указатели и т.п. Это вообщем-то одно из базовых вещей C. При этом и самое "взрымозгное" для новичка (да и не новички частно запутываются в них). В этом и сила C/C++ и его проклятие-сложность.
Спасибо всё понял в file.name() хранится адресс на строку, а strcpy копирует из данного адреса строку в filecat[key].
Leshak, а можно ваш скайп или асю, если вы живёте в Укранине то можно мобильный телефон чтоб пообщаться и в какое время вам удобно? Меня устроило б с 19-00 до 23-00 киевского времени.
Моё мыло ssglag@gmail.com.
Leshak, а можно ваш скайп или асю, если вы живёте в Укранине то можно мобильный телефон чтоб пообщаться и в какое время вам удобно? Меня устроило б с 19-00 до 23-00 киевского времени.
Моё мыло ssglag@gmail.com.
Отправил вам письмо.