Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
1

Помогите разобраться со строками в WinAVR

16.09.2012, 19:56. Показов 4724. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться со строками ! Цель собрать строку из пришедших символов.
Например, приходят по USORT символы: 1,2,а нужно получить строку «12а».

Объявляю переменные !

char stroka1[100];
char stroka2[100];
char stroka3[100];

Вариант-1
в теле программы хочу сделать так
stroka1 = "a";
или так
stroka1 = ‘a’;
Выходит такая ошибка
OS.c:415: error: insompatible types in assyknment
В чем проблема почему нельзя записать символ в строку ?

Вариант-2
strcpy(stroka1, "a"); //я так попытался записать значение «а» в строку «stroka1»
strcpy(stroka2, "5");

if (stroka1 == "a") {
PORTA = 1;
_delay_ms(1000);
}

if (stroka2 == ‘5’) {
PORTA = 2;
_delay_ms(1000);
}
Ошибок никаких не выдаётся, но на порту-А, лампочки не зажигаются !

Но как ни странно если переменную полученную по USORT, сравнить с «а» или «5» то работать будет.

USORT_RX = USORT_Receive(); //это процедура собирает по одному символу из буфера, пришедшего от обычного компа по COM-порту, на USORT.

if (USORT_RX == a) {
PORTA = 255; //включаем все сразу
_delay_ms(250);
}

Последний вариант работает ! ! !, все 8 светодиодов включаются по приходу символа «а».
_delay_ms(1000); - это задержка по времени. Чтобы успеть посмотреть что светиться.

Подскажите как объявить и задать строку символов, чтобы с ней можно было работать ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2012, 19:56
Ответы с готовыми решениями:

Помогите разобраться со строками
Доброго времени суток всем. Проблема такова, что я только новичок в программировании в 1С, и...

Помогите разобраться со строками.
#include "StdAfx.h" #include <iostream> #include <string> using namespace std; int main()...

Ребяты помогите со строками чуток разобраться.
Есть строка. В ней надо найти максимальное количество повторяющихся элементов. int main(){ ...

Помогите обмануть оптимизатор WinAVR
Коллеги! Доброго времени суток! Помогите обмануть оптимизатор. Имеется код: unsykned char mode; ...

2
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
16.09.2012, 20:59 2
Прежде всего - изучить в УЧЕБНИКЕ по стандартному Си - что такое строки и как с ними работать. И про указатели не забыть!
Это достаточно сложное понятие, особенно если переходить на Си с других языков, более высокого уровня.

Вкратце:
Строка - последовательность (Массив) символов, ограничивающийся нуль-символом.

Объявление
char stroka1[100] - делает вот что:
1. Выделяет память сплошным массивом в 100 элементов по char.
2. Адрес первого/нулевого элемента в этом массиве присваивается переменной с именем stroka1. На самом деле stroka1 - это на самом деле указатель на эту самую строку/массив, но НЕ сама строка.

Строки - это НЕ настоящий тип данных в стандартном Си, это некая конструкция из типа char. Работать с ними как со строками нужно не обычными операторами сравнения или присваивания - а функциями работы со строками.

Когда ты пишешь
stroka1 = "a"; - это попытка присвоить значение. Но на самом деле (так как это понимает компилятор) - это попытка указателю stroka1 присвоить значение указателя на другую, константную строку "a" - а это уже несовпадение типов, ибо stroka1 на самом деле хоть и указатель, но он так объявлен, что ему уже нельзя присваивать другие значения.
На самом деле нужно использовать функцию strcpy(stroka1,"a")

stroka1 == "a" - это попытка сравнить строки. Но на самом деле программа будет сравнивать значение указателя (адреса) на строку stroka1 и на коснстантную строку "a" - и всегда будет НЕ РАВНО.
Работать со сравнением строк нужно через функции strcmp, strstr и др.
Например
if ( !strcmp(stroka1,"a") )
{
....
}

Причем нужно иметь в виду - что стиндратная фунцкия сравнения строк strcmp возвращает НОЛЬ в случае совпадения, стало быть, операция "логического отрицания" (!) в условии - как раз оно. Хотя на первый "здравый взгляд" вроде неправильно.

Записать символ в строку можно, например, так:
"по-массивному":
stroka1[0] = 1;
stroka1[1] = 2;
stroka1[3] = a;
stroka1[4] = \0;

Или, "по-указательному":
*stroka1 = 1;
*(stroka1+1) = 2;
*(stroka1+2) = a;
*(stroka1+3) =\0;
0
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
16.09.2012, 23:09 3
Спасибо за подробный ответ. Я писал на Делфи, там намного проще было.
щас буду пробовать указанные функции.
0
16.09.2012, 23:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2012, 23:09
Помогаю со студенческими работами здесь

WinAVR Помогите с прошивкой ультразвукового дальномера
Всем доброе время суток, спаял я все таки ультразвуковой дальномер. Думал, что с написанием проги...

[Решено] Помогите победить варнинги: AvrStudio + WinAVR
Коллеги доброго времени суток! Помогите победить варнинги (AvrStudyo + WinAVR). Прям не знаю, что...

Не могу разобраться со строками
Всем привет. Нужно написать прогу, которая ищет введенное слово в текстовом файле и выводит на...

Не могу разобраться со строками
Вот задание: Напишите программу поиска в строке знаков пунктуации. Программа должна позволить...

Не могу со строками разобраться
У меня два вопроса: Как получить номера всех вхождений в строку пар одинаковых символов? и Как...

Не могу разобраться с некоторыми строками кода
Задание: составить программу, которая позволяет ввести с клавиатуры цифру, если значение 0-4...

Олимпиадная задачка(не могу разобраться со строками)
Может печатать через printf("%s"), а может через puts(), шут его знает. Похититель глины ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru