реклама на сайте
подробности

 
 
> Присвоение текста, Поделитесь опытом
Who_are_you?
сообщение Dec 25 2013, 12:48
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 5-02-10
Из: Донецк
Пользователь №: 55 329



Си для микроконтроллеров.

Как короче в теле программы присвоить переменной текст?

Например (самый корoткий вариант):

<тип переменной> rrr;

rrr = 'error';
или

rrr = "error";
или

?????

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lekintr
сообщение Dec 25 2013, 12:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 10-10-13
Пользователь №: 78 684



Но правильней на мой вкус
char array1[25]="Text number 1";
char array2[25]="Text number 2";
char *parray;

parray = (char *)array1;
parray = (char *)array2;

Сообщение отредактировал lekintr - Dec 25 2013, 16:52
Go to the top of the page
 
+Quote Post
Who_are_you?
сообщение Dec 25 2013, 14:09
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 185
Регистрация: 5-02-10
Из: Донецк
Пользователь №: 55 329



Цитата(lekintr @ Dec 25 2013, 14:51) *
Переменная не может быть текстом, она может быть указателем на массив заполненный текстом.
Вот указатель и заполняйте.


Спасибо.
Я, наверно, не точно задал вопрос.

char array1[25]="Text number 1";
char array2[25]="Text number 2";
char *parray;

parray = (char *)array1;
А как сюда добавить новый текст не вводя новых переменных и без циклов?
parray = (char *)array2;
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 26 2013, 09:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Who_are_you? @ Dec 25 2013, 18:09) *
А как сюда добавить новый текст не вводя новых переменных и без циклов?
Никак. В С (и С++) нет встроенного типа 'строка'. Есть просто массив из символов (байтов). Так же в С (и С++) нет динамических массивов, т.е. массив получает свой размер при его объявлении, и в дальнейшем он (размер) меняться не может (пока оставим в стороне указатели и заказ динамической памяти с кучи). В качестве строк в С используется массив символов (байтов), а конец строки обозначает байт с нулевым значением.

Конструкция char array1[25]="Text number 1"; создает массив на 25 байтов, в который помещается (побайтно) тест Text number 1, а хвост массива затирается нулями.

Конструкция parray = array1; помещает адрес этого массива (адрес первого элемента) в переменную-указатель parray. Теперь ее можно использовать в качестве строки везде, где ожидается С строка. Но тело самой строки (ее символы) так и остаются в массиве array1 (там лежит 13 символов и 12 нулей), и вы вполне можете в этот массив приписать еще что нибудь (например через strcat(array1," another str") или strcat(parray," another str") - результат будет один и тот же), главное не выйти за границы массива (т.е. у вас еще есть место под 11 симолов - не забудьте про завершающий строку 0, ему тоже нужно место!)

Цитата
А приведение типов (parray = (char *)array1;) разве тут требуется?
Нет
Цитата
Иногда ругается, не вникал особо, почему, поэтому написал чтоб уж 100%.
Ругаться будет тут (и то варнингом и в С++ только) на -
Код
char* parray = "Text number 1";
т.к. литеральная строка ("Text number 1") имеет тип const char*, а в С++ присваивать const версию указателя в не-const нельзя, это ошибка (а конкретно для строковых литералов уровень ошибки понизили, и это является предупреждением, иначе бы 80% старого С кода посыпалось бы)
Что бы не ругалось, надо писать
Код
const char* parray = "Text number 1";
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th August 2025 - 01:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016