<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Си - вставить число в строку символов (спасите мозг!)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html</link>
    <description>Здравствуйте,&lt;br&gt;&lt;br&gt;Надо сделать массив байт в котором  сначала идут служебные байты, потом строка - например как бы так:&lt;br&gt;1) const char *x=3,2,8,&quot;string 1&quot;;&lt;br&gt;&lt;br&gt;&lt;br&gt;Но так не получается, возможно только &lt;br&gt;2) const char *x=&quot;&#092;003&#092;002&#092;010string 1&quot;;&lt;br&gt;&lt;br&gt;Но это не годится, так как числовые значения не известны (будут меняться при компиляции) и определены они через макро (еще и числа десятичные), например&lt;br&gt;#define VAR1 3&lt;br&gt;#define VAR2 2&lt;br&gt;#define VAR3 8&lt;br&gt;&lt;br&gt;&lt;br&gt;То есть запись 1) выглядела бы как:&lt;br&gt;3) const char *x=VAR1,VAR2,VAR3,&quot;string 1&quot;&lt;br&gt;Но мы знаем что это не работает, нужна запись типа 2), но туда не подставить макро... &lt;br&gt;&lt;br&gt;Теоретически возможно&lt;br&gt;4) const char *x=VAR1,VAR2,VAR3,&apos;s&apos;,&apos;t&apos;,&apos;r&apos;,&apos;i&apos;,&apos;n&apos;,&apos;g&apos;,0;&lt;br&gt;Но строки ожидаются большими и очень нужна наглядность... Кроме того такие массивы будут в программе в большом количестве. (gcc, FreeBSD 7)&lt;br&gt;&lt;br&gt;В общем, задача на первый взгляд простецкая, а вот как ее решить?&lt;br&gt;Заранее благодарен за любой совет.&lt;br&gt;</description>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (pollymer)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#9</link>
    <pubDate>Tue, 19 Jan 2010 22:36:25 GMT</pubDate>
    <description>Спасибо! Это то что надо!&lt;br&gt;&lt;br&gt;&amp;gt;Более сюрреалистической и бессмысленной задачи представить сложно. Практика показывает, что если задача &lt;br&gt;&amp;gt;сформулирована путанно и выглядит странно, &lt;br&gt;&lt;br&gt;Отнюдь. Ведь все было понято правильно!&lt;br&gt;</description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (jd)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#8</link>
    <pubDate>Tue, 19 Jan 2010 12:19:08 GMT</pubDate>
    <description>Более сюрреалистической и бессмысленной задачи представить сложно. Практика показывает, что если задача сформулирована путанно и выглядит странно, скорее всего её нужно описать более обще. Типа, &#091;b&#093;не&#091;/b&#093; &quot;Нам нужно две таблицы в базе: одна с полями INT, STRING, а другая с ещё чем-то там. Как их правильно связать?&quot;, &#091;b&#093;а&#091;/b&#093; &quot;Нужна база для магазина вешалок. Для товаров нужно хранить название, цену. Нужно ещё то-то и то-то&quot;. Во втором случае вам намного-намного скорее помогут. А в первом скорее пошлют, и хорошо, если в гугл.&lt;br&gt;&lt;br&gt;В общем, вот, наклепал исключительно из желания мозги размять немного. Но было бы неплохо задачу формулировать поопределённее, в первую очередь для себя.&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;#define STR(NAME, STRING, NUM, BYTES...) struct &#123; char bytes&#091;NUM&#093;; char string&#091;sizeof(STRING)&#093;; &#092;&lt;br&gt;                                         &#125; NAME##_tmp_s = &#123;&#123;BYTES&#125;, STRING&#125;; &#092;&lt;br&gt;                                         char *NAME = (char*)&amp;NAME##_tmp_s&lt;br&gt;&lt;br&gt;#define VAR1 35 /* то же, что и &apos;#&apos; */&lt;br&gt;#define </description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (jd)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#7</link>
    <pubDate>Tue, 19 Jan 2010 11:36:42 GMT</pubDate>
    <description>&amp;gt;в Си силами препроцессора никак. &lt;br&gt;&lt;br&gt;Никогда не говори никогда ;)&lt;br&gt;</description>
</item>

<item>
    <title> конкатенировать строки? (pollymer)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#6</link>
    <pubDate>Tue, 19 Jan 2010 09:42:28 GMT</pubDate>
    <description>&amp;gt;#define QUOTEME_(x) #x &lt;br&gt;&amp;gt;#define VAR0 QUOTEME_(&#092;3) &lt;br&gt;&amp;gt;#define VAR1 QUOTEME_(&#092;2) &lt;br&gt;&amp;gt;#define VAR2 QUOTEME_(&#092;010) &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;char *s = VAR0 VAR1 VAR2 &quot;string 1&quot;; &lt;br&gt;&lt;br&gt;VAR0 и др уже определены. А то возможно и через другие макро. Я не волен их переопределять. Именно неизвестность их конкретных значений (а они зависят иногда еще и от параметров компиляции) и создало проблему.&lt;br&gt;</description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (pollymer)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#5</link>
    <pubDate>Tue, 19 Jan 2010 09:39:20 GMT</pubDate>
    <description>&amp;gt;в Си силами препроцессора никак. &lt;br&gt;&amp;gt;выноси в отдельный файл, генерируемый перлом и подобными. &lt;br&gt;&lt;br&gt;к тому дело и идет... а была надежда..&lt;br&gt;</description>
</item>

<item>
    <title> конкатенировать строки? (Вова)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#4</link>
    <pubDate>Tue, 19 Jan 2010 08:34:33 GMT</pubDate>
    <description>#define QUOTEME_(x) #x&lt;br&gt;#define VAR0 QUOTEME_(&#092;3)&lt;br&gt;#define VAR1 QUOTEME_(&#092;2)&lt;br&gt;#define VAR2 QUOTEME_(&#092;010)&lt;br&gt;&lt;br&gt;char *s = VAR0 VAR1 VAR2 &quot;string 1&quot;;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (Av)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#3</link>
    <pubDate>Tue, 19 Jan 2010 06:33:51 GMT</pubDate>
    <description>&amp;gt;Нет, нужно просто задать статически набор строк - их можно будет применять &lt;br&gt;&amp;gt;многократно, без инициализации и ничего не освобождать. При этом количество служебных &lt;br&gt;&amp;gt;байт в начале строки может меняться. &lt;br&gt;&lt;br&gt;в Си силами препроцессора никак.&lt;br&gt;выноси в отдельный файл, генерируемый перлом и подобными.&lt;br&gt;</description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (pollymer)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#2</link>
    <pubDate>Tue, 19 Jan 2010 01:44:09 GMT</pubDate>
    <description>&amp;gt;&amp;gt;1) const char *x=3,2,8,&quot;string 1&quot;; &lt;br&gt;&amp;gt;Оно? &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;#define MY_FORMAT_STRING &quot;&#037;c&#037;c&#037;c&#037;s&quot; &lt;br&gt;&amp;gt;char *make_my_crazy_format(int byte1, int byte2, int byte3, const char *str) &lt;br&gt;&lt;br&gt;Нет, нужно просто задать статически набор строк - их можно будет применять многократно, без инициализации и ничего не освобождать. При этом количество служебных байт в начале строки может меняться.&lt;br&gt;&lt;br&gt;Т.е. никакого программирования. Нужно &quot;просто&quot; научиться инициализировать строку.&lt;br&gt;&lt;br&gt;вместо const char *p=&quot;&#092;010aaa&quot;, *s=&quot;&#092;002&#092;010sss&quot;;&lt;br&gt;надо чтото типа #define XX 8 ,, const char *p=doSTRING(XX,&quot;aaa&quot;), s=doSTRING(2,XX,&quot;sss&quot;);&lt;br&gt;&lt;br&gt;где doSTRING - это ни в коем случае не функция (!) а макро&lt;br&gt;</description>
</item>

<item>
    <title>Си - вставить число в строку символов (спасите мозг!) (Slavaz)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8591.html#1</link>
    <pubDate>Tue, 19 Jan 2010 01:09:45 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt;Здравствуйте, &lt;br&gt;&amp;gt;Надо сделать массив байт в котором  сначала идут служебные байты, потом &lt;br&gt;&amp;gt;строка - например как бы так: &lt;br&gt;&amp;gt;1) const char *x=3,2,8,&quot;string 1&quot;; &lt;br&gt;&amp;gt;В общем, задача на первый взгляд простецкая, а вот как ее решить? &lt;br&gt;&lt;br&gt;Оно?&lt;br&gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;#define MY_FORMAT_STRING &quot;&#037;c&#037;c&#037;c&#037;s&quot;&lt;br&gt;char *make_my_crazy_format(int byte1, int byte2, int byte3, const char *str)&lt;br&gt;&#123;&lt;br&gt;  char *buffer;&lt;br&gt;  int buff_len;&lt;br&gt;  buff_len = sprintf(NULL,MY_FORMAT_STRING, (char) byte1, (char) byte2, (char) byte3, str);&lt;br&gt;  if (buff_len &amp;lt; 0 )&lt;br&gt;    return NULL;&lt;br&gt;&lt;br&gt;  buffer = malloc(buff_len+1);&lt;br&gt;  if (buffer == NULL)&lt;br&gt;    return NULL;&lt;br&gt;&lt;br&gt;  (void) sprintf(buffer,MY_FORMAT_STRING, (char) byte1, (char) byte2, (char) byte3, str);&lt;br&gt;&lt;br&gt;  return buffer;&lt;br&gt;&#125;&lt;br&gt;#undef MY_FORMAT_STRING&lt;br&gt;&lt;br&gt;...&lt;br&gt;char *tra_ta_ta = make_my_crazy_format(3,2,8,&quot;string 1&quot;);&lt;br&gt;if (tra_ta_ta != NULL)&lt;br&gt;&#123;&lt;br&gt;  // работа с переменной&lt;br&gt;  free(tra_ta_ta);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;P.S. Не проверял, навскидку писал, как идею.&lt;br&gt;</description>
</item>

</channel>
</rss>
