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

 
 
> C, вставить символ внутри строки
ViKo
сообщение Apr 26 2013, 12:40
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Допустим, есть строка
Код
  static const uint8_t *TestText = "Test string";

Хочу вставить в середину специальный символ, допустим \x18. Откуда он возьмется, не важно (сам нарисую). Это можно сделать так:
Код
  static const uint8_t *TestText = "Test\x18string";

Но мне не нравятся эти ничего не говорящие числа. Как можно подменить с помощью #define символ, чтобы принимался внутри строки?
И попутно, как вставить символ, например, 'A', внутрь строки?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
neiver
сообщение Apr 26 2013, 12:50
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Код
#define MY_SYMBOL_NAME "\x18"
static const uint8_t *TestText = "Test" MY_SYMBOL_NAME "string";

Строковые литералы идущие подряд через withespace склеиваются компилятором в один литерал. Так можно засунуть дефайн внутрь строки, но в дефайне может быть только строковый литерал.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 26 2013, 13:24
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(neiver @ Apr 26 2013, 15:50) *
Код
#define MY_SYMBOL_NAME "\x18"
static const uint8_t *TestText = "Test" MY_SYMBOL_NAME "string";

Получилось, спасибо! И без пробелов тоже склеилось.

Цитата(winipuh @ Apr 26 2013, 15:52) *
Или еще есть оператор препроцессора # - "превращения" в строку.

И как применить...? Если внутри строки написать "Test"#MY_SYMBOL"string", Keil ругается
error: #10: "#" not expected here
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 26 2013, 13:30
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(ViKo @ Apr 26 2013, 17:24) *
Получилось, спасибо! И без пробелов тоже склеилось.


И как применить...? Если внутри строки написать "Test"#MY_SYMBOL"string", Keil ругается
error: #10: "#" not expected here

##
Правда, результат в данном случае будет не такой, как надо.

Вот если использовать вложенные макросы, типа
#define CONCAT(a,b ) a##b

тогда можно попробовать CONCAT("Test", MY_STRING)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   C, вставить символ внутри строки   Apr 26 2013, 12:40
|- - ar__systems   Цитата(MrYuran @ Apr 26 2013, 08:30) ## П...   Apr 26 2013, 18:07
- - winipuh   Чем конкатенация строк на этапе компиляции не устр...   Apr 26 2013, 12:52
- - ViKo   Тут вот еще какая засада. Хотел спецсимволы описат...   Apr 26 2013, 18:53
- - ViKo   Опять не могу сообщение отправить, начиная с полун...   Apr 27 2013, 08:31
|- - Сергей Борщ   QUOTE (ViKo @ Apr 27 2013, 11:31) Вопрос ...   Apr 27 2013, 15:15
- - winipuh   Проблема тут в том, что Вы хотите выполнить конкат...   Apr 27 2013, 20:37
|- - ViKo   Цитата(winipuh @ Apr 27 2013, 23:37) Проб...   Apr 29 2013, 04:27
|- - winipuh   Цитата(ViKo @ Apr 29 2013, 08:27) Так уже...   Apr 29 2013, 11:26
|- - ViKo   Цитата(winipuh @ Apr 29 2013, 14:26) Вы м...   Apr 29 2013, 11:33
- - adnega   Если сильных возражений не будет, то хотелось бы в...   Apr 29 2013, 12:04
|- - AHTOXA   Цитата(adnega @ Apr 29 2013, 18:04) Но мо...   Apr 29 2013, 17:56
- - neiver   Можно и строку в кавычках в дефайн передать, тольк...   Apr 29 2013, 13:49
- - adnega   Цитата(neiver @ Apr 29 2013, 17:49) Можно...   Apr 29 2013, 17:50


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:51
Рейтинг@Mail.ru


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