|
Как определить массив строк в С для AVR?, в СИ ноль с + |
|
|
|
May 1 2007, 11:54
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(nss @ May 1 2007, 11:42)  Код char *StringArray[]={ "строка 1", "строка 2", "строка 3", "строка 4", "строка 5", "строка 6" } Это массив указателей, что для описанного случая совсем не то.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 1 2007, 12:19
|

Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 15-03-06
Пользователь №: 15 277

|
Цитата(zltigo @ May 1 2007, 12:54)  Это массив указателей, что для описанного случая совсем не то. Ну почему же сразу не то. Человеку скорее всего надо хранить список "нумерованных строк". На пример, для сопоставления коду ошибки ее описания.
|
|
|
|
|
May 1 2007, 19:31
|

инопланетянин
  
Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832

|
Если заранее известна длина предполагамых строк в массиве (например 15), а также количество самих строк (например 5), то можно сделать 2-мерный массив: char Arr[5][15]; тогда обращение к нему будет такое: Arr[0] - это указатель на 1 строку, Arr[1] - на 2-ю и.т.д (будьте внимательны Arr[n] будет иметь тип char *) или Arr[0][0] - 1-й символ 1 строки, (Arr[n][m] будет иметь тип просто char) Arr[0][1] - 2-й символ 1 строки, Arr[1][0] - 1-й символ 2-й строки, Arr[1][1] - 2-й символ 2-й строки, думаю понятно... Если же в перспективе размер самих строк будет неизвестен заранее, тогда придется пользоваться динамическим выделением памяти... Но советую, для начала, этого не делать... Лучше сделайте обычный массив с запасом  Если неизвестно количество самих строк можно использовать связанный список (он тоже основан на динамическом выделении памяти), но тоже не рекомендую им пользоваться, если не чувствуете уверенности.  Пользуйтесь 2-мерным массивом заданной размерности. Это поможет вам избежать лишних и неприятных ошибок.
Сообщение отредактировал Legotron - May 1 2007, 19:33
|
|
|
|
|
May 1 2007, 20:22
|

Частый гость
 
Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071

|
Большой респфенкс!
Есть вот такой код. Суть отправлять dest=0, dest=1.....,dest=4. Не нравится он мне, кажется легче можно сделать подскажите и засыпает вот такими мессагами
main_ATMEGA8.c:251: warning: initialization makes integer from pointer without a cast main_ATMEGA8.c:252: warning: initialization makes integer from pointer without a cast main_ATMEGA8.c:255: warning: implicit declaration of function `itoa' main_ATMEGA8.c:256: warning: assignment makes integer from pointer without a cast
на эти строки соответственно char temp = szstring; char temp2 = ""; itoa (index,temp2, 10); temp=temp+temp2+"\x0d";
Сам код
const char szstring[] PROGMEM = "dest="; char index=0; char temp2 = ""; while (index<5){ UART_ClearRxBuf(); char temp = szstring; itoa (index,temp2, 10); temp=temp+temp2+"\x0d"; UART_outstr(temp); index=index+1; }
И если необходимо извлечь из строки цифру и преобразовать скажем в цифровое значение, то можно ли сделать так (извлекаем 95) char Gettemp(void) { char n = 0; char* pBuf = UART_Recv(&n);//pBuf= "temp: 0,95" return atoi(strncpy (pBuf, strchr(pBuf, ",")+1, 2)); }
Сообщение отредактировал The Fresh - May 1 2007, 20:46
|
|
|
|
|
May 1 2007, 21:19
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(The Fresh @ May 1 2007, 20:22)  char temp = szstring; char temp2 = ""; itoa (index,temp2, 10); temp=temp+temp2+"\x0d"; Сказать что-либо разумное мне по этому поводу трудно  , поскольку все это представляет из бессмысленный набор всяких слов. Для начала писания, надо хоть самую малость представлять язык. Не воспринимайте, пожалуйса это слижком близко к сердцу - но надо почитать хоть чуть-чуть о типах данных. "char temp и temp2" это байты в них "строка" не вмещается ну никак. "\x0d" - это тоже строка и в ней два байта и ее тоже нельзя присвоить байту. itoa() имеет три аргумента, причем первый это указатель на строчку, чем 'index' не является - он у Вас опять байт. Далее. Cо стоками операции '+' и прочие не выполняются - смотрите библиотечные функции strcat() и прчие для работы со строками. Указатели не могут указывать в никуда, точнее конечно могут, но ими тогда пользоваться нельзя, поскольку туда, куда они указывают должно быть место, для того чего туда хочется положить.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 2 2007, 03:52
|

Частый гость
 
Группа: Новичок
Сообщений: 146
Регистрация: 3-12-06
Пользователь №: 23 071

|
Да я и сам догадывался, что char это max=255 или буковка "A" или "B", источников толковых не нашел. Да и не совсем понимаю подойдут ли обычные книжки по C для МК. Была у меня книжка в электронном виде автор ШПАК, прогр на C для AVR, ушла в небытие. Может выложите что-нибудь. Винете полно примеров работы с таймерами, уартом, и подобной перефирией, а со строками работа в примерах не попадалась, отсюда мои бесмысленные перлы
Сообщение отредактировал The Fresh - May 2 2007, 04:14
|
|
|
|
|
May 2 2007, 08:01
|

Местный
  
Группа: Свой
Сообщений: 453
Регистрация: 22-04-07
Пользователь №: 27 235

|
Цитата(The Fresh @ May 2 2007, 03:52)  Да я и сам догадывался, что char это max=255 или буковка "A" или "B", источников толковых не нашел. Да и не совсем понимаю подойдут ли обычные книжки по C для МК. Была у меня книжка в электронном виде автор ШПАК, прогр на C для AVR, ушла в небытие. Может выложите что-нибудь. Винете полно примеров работы с таймерами, уартом, и подобной перефирией, а со строками работа в примерах не попадалась, отсюда мои бесмысленные перлы  avr123DOTnmDOTru DOT->. там много чего, есть ссылки на курс лекций по avr(для новичка очень хороший) есть ссылки и на литературу в хорошем качестве.
Сообщение отредактировал Losik - May 2 2007, 08:03
|
|
|
|
|
May 2 2007, 08:13
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(The Fresh @ May 2 2007, 03:52)  источников толковых не нашел. Ну не надо, ладно? Цитата Да и не совсем понимаю подойдут ли обычные книжки по C для МК. Естественно подойдут. Иначе это был-бы не 'C'. Цитата Винете полно примеров работы ... Не надо "примеров", возьмите описание именно языка - кратко, четко, исчерпывающе.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 3 2007, 10:01
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Цитата Была у меня книжка в электронном виде автор ШПАК, прогр на C для AVR, ушла в небытие. http://lord-n.narod.ru/walla.html#ShpakCforAVRiPICНе читал ... замечательная книга по С авторов "Керниган и Рич" -- я читаю ее (в электронке нет - только распечатка осталась) -- коротко и доступно.
Сообщение отредактировал AndryG - May 3 2007, 10:03
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|