Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

Закрытая тема
Опции темы
Непрочитано 09.04.2017, 11:23   #1
AssemblerRu
Временная регистрация
 
Регистрация: 30.08.2010
Сообщений: 48
Сказал спасибо: 0
Сказали Спасибо 24 раз(а) в 17 сообщении(ях)
AssemblerRu на пути к лучшему
По умолчанию строковые выражения

пишу в CodeVision
строка
char Gas [20];
присваиваем значение
Gas = "Data";
ошибка компиляции: the expression must be a modifiable lvalue
перевод выражение должно быть изменяемым значением lvalue
обычный Си-шный код не понимаю как правильно
Реклама:
AssemblerRu вне форума  
Непрочитано 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
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,094
Сказал спасибо: 2,570
Сказали Спасибо 11,934 раз(а) в 5,983 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: строковые выражения

Сообщение от AssemblerRu Посмотреть сообщение
пишу в CodeVision
строка
char Gas [20];
А с чего Вы решили, что компилятор - экстрасенс и знает, что этот массив - строка?
Строковые переменные должны объявляться соответствующим образом.
Сообщение от МВА Посмотреть сообщение
Вот так: Gas[0] = "Data";
Из строки запишется один байт. И не факт, что первый, скорее, последний. А последний байт строки - сами знаете...

Сообщение от МВА Посмотреть сообщение
у меня такой код компилируется без ошибок
Без ошибок скомпилируется и Gas[0] =7777777777777; Только результат будет для Вас неожиданным.
Строки в си не поддержаны на уровне явного объявления массива строкой и простых операций, типа присвоения. Только через функции работы со строками. То, что Вы предложили в предыдущем посте, если и работает правильно, то это плюшка конкретного компилятора, а не общее правило. А плюшки - это такая хрень, что может работать, а может и головняк обеспечить. Работайте в стандарте.

Ну вот... Опять пост поменяли...

Сообщение от AssemblerRu Посмотреть сообщение
Gas = "Data";
Через strcpy("Data", Gas) будет работать.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 09.04.2017 в 13:04.
akegor вне форума  
Эти 2 пользователя(ей) сказали Спасибо akegor за это сообщение:
mike-y-k (09.04.2017), МВА (09.04.2017)
Непрочитано 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
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,094
Сказал спасибо: 2,570
Сказали Спасибо 11,934 раз(а) в 5,983 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: строковые выражения

Сообщение от МВА Посмотреть сообщение
А в каком хидере находится функция strcpy(
string.h
.....
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Сказали "Спасибо" akegor
МВА (09.04.2017)
Непрочитано 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
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,234
Сказал спасибо: 11,155
Сказали Спасибо 3,853 раз(а) в 2,924 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: строковые выражения

Стоит таки потратить немного времени на чтение классики.
Начать с Кернигана и Ритчи "Язык программирования Си".
Продолжить с Страуструпом.
И хороший справочник по стандартным библиотекам.
В процессе чтения можно пройтись по примерам на железе.
Будет в голове больше понимания и порядка.

Кстати есть ещё один вариант решения: memcpy (dest, src, strlen (src)); .
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…

Последний раз редактировалось mike-y-k; 09.04.2017 в 22:51.
mike-y-k вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6166 19.02.2024 18:22
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
строковые функции в cvavr arc Микроконтроллеры, АЦП, память и т.д 15 10.03.2007 01:14


Часовой пояс GMT +4, время: 06:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot