AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
09.04.2017, 11:23
|
#1
|
Временная регистрация
Регистрация: 30.08.2010
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 24 раз(а) в 17 сообщении(ях)
|
строковые выражения
пишу в CodeVision
строка
char Gas [20];
присваиваем значение
Gas = "Data";
ошибка компиляции: the expression must be a modifiable lvalue
перевод выражение должно быть изменяемым значением lvalue
обычный Си-шный код не понимаю как правильно
|
|
|
|
09.04.2017, 11:59
|
#2
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: строковые выражения
Сообщение от AssemblerRu
|
пишу в CodeVision
строка
char Gas [20];
присваиваем значение
Gas = "Data";
ошибка компиляции: the expression must be a modifiable lvalue
перевод выражение должно быть изменяемым значением lvalue
обычный Си-шный код не понимаю как правильно
|
Доброго времени суток.
По идее само имя переменной должно указывать на начало массива, но у меня такой код компилируется без ошибок, если после имени поставить начальный адрес массива. Вот так: Gas[0] = "Data";
Но при это могут быть предупреждения, не знаю почему они появляются не всегда, о том, что неопределенный указатель имеет тип int.
Последний раз редактировалось МВА; 09.04.2017 в 12:47.
|
|
|
|
09.04.2017, 12:26
|
#3
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,094
Сказал спасибо: 2,570
Сказали Спасибо 11,934 раз(а) в 5,983 сообщении(ях)
|
Re: строковые выражения
Сообщение от AssemblerRu
|
пишу в CodeVision
строка
char Gas [20];
|
А с чего Вы решили, что компилятор - экстрасенс и знает, что этот массив - строка?
Строковые переменные должны объявляться соответствующим образом.
Сообщение от МВА
|
Вот так: Gas[0] = "Data";
|
Из строки запишется один байт. И не факт, что первый, скорее, последний. А последний байт строки - сами знаете...
Сообщение от МВА
|
у меня такой код компилируется без ошибок
|
Без ошибок скомпилируется и Gas[0] =7777777777777; Только результат будет для Вас неожиданным.
Строки в си не поддержаны на уровне явного объявления массива строкой и простых операций, типа присвоения. Только через функции работы со строками. То, что Вы предложили в предыдущем посте, если и работает правильно, то это плюшка конкретного компилятора, а не общее правило. А плюшки - это такая хрень, что может работать, а может и головняк обеспечить. Работайте в стандарте.
Ну вот... Опять пост поменяли...
Сообщение от AssemblerRu
|
Gas = "Data";
|
Через strcpy("Data", Gas) будет работать.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 09.04.2017 в 13:04.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо akegor за это сообщение:
|
|
|
09.04.2017, 13:19
|
#4
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: строковые выражения
Сообщение от akegor
|
Ну вот... Опять пост поменяли...
|
Ну, я присмотрелся и увидел, что по указателю можно только по одному символу загонять в массив, а для целой строки нужна функция. У меня в архиве есть одна распечатка по этой теме. Вот она.
PS А в каком хидере находится функция strcpy("Data", Gas)?
Последний раз редактировалось МВА; 09.04.2017 в 13:31.
|
|
|
|
09.04.2017, 13:37
|
#5
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,094
Сказал спасибо: 2,570
Сказали Спасибо 11,934 раз(а) в 5,983 сообщении(ях)
|
Re: строковые выражения
Сообщение от МВА
|
А в каком хидере находится функция strcpy(
|
string.h
.....
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
09.04.2017, 13:45
|
#6
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 841
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: строковые выражения
Сообщение от akegor
|
string.h
.....
|
Я уже у себя в GCC нашел, но все-равно спасибо.
Попробовал в avr studio использовать функцию, не сработало. Когда почитал мануал, то увидел ошибку. Указатель на копируемую строку должен быть вторым, тогда работает.
strcpy(Gas, "Data");
Последний раз редактировалось МВА; 09.04.2017 в 14:10.
|
|
|
|
09.04.2017, 21:31
|
#7
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,234
Сказал спасибо: 11,155
Сказали Спасибо 3,853 раз(а) в 2,924 сообщении(ях)
|
Re: строковые выражения
Стоит таки потратить немного времени на чтение классики.
Начать с Кернигана и Ритчи "Язык программирования Си".
Продолжить с Страуструпом.
И хороший справочник по стандартным библиотекам.
В процессе чтения можно пройтись по примерам на железе.
Будет в голове больше понимания и порядка.
Кстати есть ещё один вариант решения: memcpy (dest, src, strlen (src)); .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 09.04.2017 в 22:51.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:15.
|
|