|
C, вставить символ внутри строки |
|
|
|
Apr 26 2013, 12:40
|

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

|
Допустим, есть строка Код static const uint8_t *TestText = "Test string"; Хочу вставить в середину специальный символ, допустим \x18. Откуда он возьмется, не важно (сам нарисую). Это можно сделать так: Код static const uint8_t *TestText = "Test\x18string"; Но мне не нравятся эти ничего не говорящие числа. Как можно подменить с помощью #define символ, чтобы принимался внутри строки? И попутно, как вставить символ, например, 'A', внутрь строки?
|
|
|
|
|
 |
Ответов
|
Apr 27 2013, 20:37
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Проблема тут в том, что Вы хотите выполнить конкатенацию строки с символом ("abcd" + '2'), а в си этого не предусмотрено. Хотя если погуглить - видно что Вы не единственный такой в мире.  Вот пример (правда похоже, что не рабочий). Задачу, наверное, Вы сможете решить только придумаете как средствами препроцессора разбить строку на массив символов ( попытки также можно найти в инете), плюс использование составных литералов, которые появились в С99: Код #include <stdio.h> int main(void) { enum spec_symb_t { PLUS = 0x2b, MINUS = 0x2d }; puts("+-"); puts((const char[]) {PLUS, MINUS, '\0'}); return 0; } Попутно у меня к Вам возникает встречный вопрос - ради чего такая акробатика в коде?  Вы где и как это предполагаете использовать? p.s. может быть здесь сможете что-то найти...
|
|
|
|
|
Apr 29 2013, 04:27
|

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

|
Цитата(winipuh @ Apr 27 2013, 23:37)  Проблема тут в том, что Вы хотите выполнить конкатенацию строки с символом ("abcd" + '2'), а в си этого не предусмотрено. Так уже выяснили,что можно склеивать строки. А строка из одного символа - такая же полноправная строка. Замечательно, что при склейке строк промежуточные нули уничтожаются. Этого механизма мне достаточно. Цитата Попутно у меня к Вам возникает встречный вопрос - ради чего такая акробатика в коде?  Вы где и как это предполагаете использовать? Уже использую, в своем изделии. Сам шрифт создал, сам и текст вывожу, на свой же ЖКИ. Например, S_DELTA"X=". До этого символы, не входящие в ANSI набор, рисовал отдельно, в отдельном массиве. Теперь решил объединить со стандартными, все равно первые 32 места "пропадают".
|
|
|
|
|
Apr 29 2013, 11:26
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Цитата(ViKo @ Apr 29 2013, 08:27)  Так уже выяснили,что можно склеивать строки. А строка из одного символа - такая же полноправная строка. Замечательно, что при склейке строк промежуточные нули уничтожаются. Этого механизма мне достаточно. Вы меня не поняли. Чуть ранее Вы говорили о использовании enum вместо define (о чем Вы говорили чуть ранее). Мой опус был посвящен именно этому. И в этой связи речь шла о проблеме склейки строковой константы с символьной константой, а не о склейке двух строк... Если бы знал, что уже Вы уже вариант с enum отбросили и остановились на использовании #define
Сообщение отредактировал winipuh - Apr 29 2013, 11:28
|
|
|
|
Сообщений в этой теме
ViKo C, вставить символ внутри строки Apr 26 2013, 12:40 neiver Код#define MY_SYMBOL_NAME "\x18"
stat... Apr 26 2013, 12:50 ViKo Цитата(neiver @ Apr 26 2013, 15:50) Код#d... Apr 26 2013, 13:24  MrYuran Цитата(ViKo @ Apr 26 2013, 17:24) Получил... Apr 26 2013, 13:30   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   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|