Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Присвоение текста
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Who_are_you?
Си для микроконтроллеров.

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

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

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

rrr = 'error';
или

rrr = "error";
или

?????

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

parray = (char *)array1;
parray = (char *)array2;
Lagman
Цитата(lekintr @ Dec 25 2013, 16:51) *
Но правильней на мой вкус
char array1[25]="Text number 1";
char array2[25]="Text number 2";
char *parray;

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

А приведение типов (parray = (char *)array1;) разве тут требуется?
lekintr
Иногда ругается, не вникал особо, почему, поэтому написал чтоб уж 100%.
Lagman
Цитата(lekintr @ Dec 25 2013, 17:45) *
Иногда ругается, не вникал особо, почему, поэтому написал чтоб уж 100%.

Керниган и Ритчи, в главе 5.3, писали:
Цитата
Между индексированием и арифметикой с указателями существует очень тесная связь. По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива. После присваивания
pa = &a[0];
pa и a имеют одно и то же значение. Поскольку имя массива является синонимом адреса его начального элемента, присваивание pa = &a[0] можно также записать в следующем виде:
pa = a;
Еще более удивительно (по крайней мере на первый взгляд) то, что a[i] можно записать как *(a+i). Вычисляя a[i], Си сразу преобразует его в *(a+i); указанные две формы записи эквивалентны. Из этого следует,что записи &a[i] и a+i также будут эквивалентными, т.е. и в том и в другом случае это адрес i-го элемента массива a. С другой стороны, если pa — указатель, то его можно использовать с индексом, т.е. запись pa[i] эквивалентна записи *(pa+i). Короче говоря, элемент массива можно изображать как в виде указателя со смещением, так и в виде имени массива с индексом.
Who_are_you?
Цитата(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;
lekintr
Цитата(Who_are_you? @ Dec 25 2013, 18:09) *
А как сюда добавить новый текст не вводя новых переменных и без циклов?


вот тут есть великие спецы с умными книжками, пускай они и помогают. В пень.
Хотя надо понять что Вы имеете ввиду под "новым текстом".
Вы хотите текст в виде констант использовать, и он не меняется, или хотите заполнять его на лету.
Если константы это одно, если на лету это другое.
Who_are_you?
Цитата(lekintr @ Dec 25 2013, 16:10) *
вот тут есть великие спецы с умными книжками, пускай они и помогают. В пень.

Очень жаль.

Но все равно большое Вам спасибо.


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

parray = (char *)array1;
А как сюда добавить новый текст не вводя новых переменных и без циклов?
parray = (char *)array2;
SSerge
Цитата(Who_are_you? @ Dec 25 2013, 21:37) *
parray = (char *)array1;
А как сюда добавить новый текст не вводя новых переменных и без циклов?

Знать бы ещё куда именно "сюда".
Если хочется чтобы указатель parray теперь указывал на другой текст то способов куча, например
parray = "новый текст";
lekintr
Или если есть возможность подключить sprintf, тогда работать с этой функцией, правда она ресурсов жрет много.

sprintf(parray, "новый текст");
если хотите "сшивать", тогда может так
sprintf(parray, "$s $s и еще новый текст", array1, array2);
Lagman
Цитата(lekintr @ Dec 25 2013, 18:10) *
вот тут есть великие спецы с умными книжками, пускай они и помогают. В пень.

"Чукча не читатель, чукча писатель" !?
И книга от отцов-основателей языка С, это библия для программистов на C.

А ТС советую почитать http://www.cyberforum.ru/blogs/18334/blog97.html
lekintr
Цитата(Lagman @ Dec 25 2013, 23:01) *
"Чукча не читатель, чукча писатель" !?
И книга от отцов-основателей языка С, это библия для программистов на C.


"Тролль детектед"...
kolobok0
Цитата(lekintr @ Dec 25 2013, 23:37) *
"Тролль детектед"...


OFF/2:
Вам правильно указали на стандарт, из самой правильной книги по сям.




XVR
Цитата(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";
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.