<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Нормальный ли код получился? (Переворот строки Си).</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html</link>
    <description>Тренировался, нужно было написать функцию переворачивания строки, strrev не хотелось использовать. Нету ли ничего шибко крамольного в коде?&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;const char *prnt(int k, char *a) &#123;&lt;br&gt;char  new_s&#091;k&#093;=&#123;0&#125;;&lt;br&gt;int i=0;&lt;br&gt;while(k !=0 ) &#123;&lt;br&gt; k--;&lt;br&gt;new_s&#091;i&#093;=a&#091;k&#093;;&lt;br&gt; ++i;&lt;br&gt;&lt;br&gt;&#125;&lt;br&gt;printf(&quot;&#037;s&quot;, new_s);&lt;br&gt;return (new_s);&lt;br&gt;&#125;&lt;br&gt; &lt;br&gt; main (int argc, char *argv&#091;&#093;) &#123;&lt;br&gt; char *a=argv&#091;1&#093;;&lt;br&gt;if(argv&#091;1&#093;==0) &#123;&lt;br&gt;return 0;&lt;br&gt;&#125;&lt;br&gt;int k=0;&lt;br&gt;while (a&#091;k&#093; != 0) &#123;&lt;br&gt;k++;&lt;br&gt;&#125;&lt;br&gt;prnt( k, a);&lt;br&gt;&#125;&lt;br&gt;</description>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (dcc0)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#38</link>
    <pubDate>Tue, 20 Sep 2016 12:42:22 GMT</pubDate>
    <description>Дособирал я все-таки этот код:&lt;br&gt;Вроде все стандартно, вот только не знаю на любой ли машине скомпилится и корректно отработает. &lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;//This cut x&lt;br&gt;  char  subb (char * x, int i) &#123;&lt;br&gt;               x&#091;i&#093;=&apos;&#092;0&apos;;   &lt;br&gt;&#125;&lt;br&gt;//This cut y&lt;br&gt;  char  subb2 (char * y, int i) &#123;&lt;br&gt;               int k = 0;&lt;br&gt;               while (k != strlen(y)+1) &#123;&lt;br&gt;                     y&#091;k&#093;=y&#091;i&#093;;&lt;br&gt;                    i++;&lt;br&gt;                    k++; &lt;br&gt;              &#125;  &lt;br&gt;  &#125; &lt;br&gt;//It gets an argumet like 1234 or abcd. All symbols must be uniqe&lt;br&gt;        int main (int argc, char *argv&#091;&#093;) &#123;&lt;br&gt;             if (argc &amp;lt; 2) &#123;&lt;br&gt;             printf(&quot;Enter an argument. Example 1234&quot;);&lt;br&gt;             return 0;         &lt;br&gt;                      &#125;           &lt;br&gt;             char b&#091;strlen(argv&#091;1&#093;)&#093;;&lt;br&gt;             char a&#091;strlen(argv&#091;1&#093;)&#093;; &lt;br&gt;             int ij=0;&lt;br&gt;             while (ij!=strlen(argv&#091;1&#093;)) &#123;&lt;br&gt;                   a&#091;ij&#093;=argv&#091;1&#093;&#091;ij&#093;;&lt;br&gt;                   b&#091;ij&#093;=argv&#091;1&#093;&#091;ij&#093;;&lt;br&gt;                   ij++;&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (f2404)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#37</link>
    <pubDate>Fri, 16 Sep 2016 15:21:29 GMT</pubDate>
    <description>&amp;gt;&amp;gt; В С не нужно приводить результат malloc к типу, то есть (char*) &lt;br&gt;&amp;gt;&amp;gt; не нужен.&lt;br&gt;&amp;gt; Возможно... Но, когда man malloc говорит, что void *malloc(size_t size); я лично &lt;br&gt;&amp;gt; предпочту сделать явное приведение типа. Да, тот же товарищ man ниже &lt;br&gt;&amp;gt; говорит что выданный шмат сала, т. е. памяти &quot;suitably aligned for &lt;br&gt;&amp;gt; any built-in type&quot;... Но человеку, пользующему не только лишь built-in type, &lt;br&gt;&amp;gt; вполне простительно выработать привычку делать приведение типов всегда, нежели каждый &lt;br&gt;&amp;gt; раз думать: &quot;В эту кучу я буду сваливать что-то из соседского &lt;br&gt;&amp;gt; typedef&apos;а или акуратно разложу свои буилд-ины?..&quot; &lt;br&gt;&lt;br&gt;Дело ваше, но&lt;br&gt;&lt;br&gt;MEM02-C-EX1: Do not immediately cast the results of malloc() for code that will be compiled using a C90-conforming compiler because it is possible for the cast to hide a more critical defect (see DCL31-C. Declare identifiers before using them for a code example that uses malloc() without first declaring it).&lt;br&gt;&lt;br&gt;https://www.securecoding.cert.org/confluence/display/c/MEM02-C.+Immediately+cast+the+resul</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (Asgard)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#36</link>
    <pubDate>Fri, 16 Sep 2016 15:02:02 GMT</pubDate>
    <description>&amp;gt; if (argc &amp;gt; 1) &#123; &lt;br&gt;&amp;gt;          char *a=argv&#091;1&#093;; &lt;br&gt;&amp;gt;          int z = 0; &lt;br&gt;&amp;gt; while (argv&#091;1&#093;&#091;z&#093; != 0) &#123; &lt;br&gt;&amp;gt;       ++z; &lt;br&gt;&amp;gt;         &#125; &lt;br&gt;&amp;gt;         stev(argv&#091;1&#093;, z); &lt;br&gt;&amp;gt;         printf(&quot;&#037;s&quot;, a); &lt;br&gt;&amp;gt;          &#125; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&lt;br&gt;Вы установили в коде, что работать собираетесь с указателем a (char *a=argv&#091;1&#093;;). Почему далее по коду (цикл while и вызов stev()) Вы обращаетесь к argv&#091;1&#093;?&lt;br&gt;&lt;br&gt;Да, пример всё ещё учебный... Но именно на учебных примерах надо оттачивать свою внимательность. Иначе в реальном коде это может легко привести к многочасовым (а иногда и многодневным) поискам серой кошки в тёмной комнате :)&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (Asgard)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#35</link>
    <pubDate>Fri, 16 Sep 2016 14:50:13 GMT</pubDate>
    <description>&amp;gt; В С не нужно приводить результат malloc к типу, то есть (char*) &lt;br&gt;&amp;gt; не нужен.&lt;br&gt;&lt;br&gt;Возможно... Но, когда man malloc говорит, что void *malloc(size_t size); я лично предпочту сделать явное приведение типа. Да, тот же товарищ man ниже говорит что выданный шмат сала, т. е. памяти &quot;suitably aligned for any built-in type&quot;... Но человеку, пользующему не только лишь built-in type, вполне простительно выработать привычку делать приведение типов всегда, нежели каждый раз думать: &quot;В эту кучу я буду сваливать что-то из соседского typedef&apos;а или акуратно разложу свои буилд-ины?..&quot;&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (dcc0)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#34</link>
    <pubDate>Fri, 16 Sep 2016 14:23:29 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Второй вариант вроде тоже корректный получился.&lt;br&gt;&amp;gt;&amp;gt; Можно вводить строки с пробелом, но тогда надо брать в кавычки. В &lt;br&gt;&amp;gt;&amp;gt; общем и русскими символами все тоже работает. Мусора вроде нет.&lt;br&gt;&amp;gt; А зачем вы определяете TCHAR и не используете его?&lt;br&gt;&lt;br&gt;Не разобрался еще с этим, забыл выкинуть из кода.&lt;br&gt;В это еще предстоит вникнуть&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (f2404)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#33</link>
    <pubDate>Fri, 16 Sep 2016 12:02:30 GMT</pubDate>
    <description>&amp;gt; Второй вариант вроде тоже корректный получился.&lt;br&gt;&amp;gt; Можно вводить строки с пробелом, но тогда надо брать в кавычки. В &lt;br&gt;&amp;gt; общем и русскими символами все тоже работает. Мусора вроде нет.&lt;br&gt;&lt;br&gt;А зачем вы определяете TCHAR и не используете его?&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (dcc0)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#32</link>
    <pubDate>Fri, 16 Sep 2016 11:58:31 GMT</pubDate>
    <description>Второй вариант вроде тоже корректный получился.&lt;br&gt;Можно вводить строки с пробелом, но тогда надо брать в кавычки. В общем и русскими символами все тоже работает. Мусора вроде нет.&lt;br&gt;&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;locale.h&amp;gt;&lt;br&gt;#include &amp;lt;tchar.h&amp;gt; &lt;br&gt;#ifdef UNICODE&lt;br&gt;    typedef wchar_t TCHAR;&lt;br&gt;#else&lt;br&gt;    typedef char TCHAR;&lt;br&gt;#endif&lt;br&gt;&lt;br&gt;char stev(char * a, int i) &#123;&lt;br&gt;     &lt;br&gt;      int k=0; &lt;br&gt;      char c;&lt;br&gt;&lt;br&gt;while( i &amp;gt; k ) &#123;  &lt;br&gt;         i--;      &lt;br&gt;         c=a&#091;k&#093;;&lt;br&gt;         a&#091;k&#093;=a&#091;i&#093;;&lt;br&gt;         a&#091;i&#093;=c;&lt;br&gt;          k++; &lt;br&gt;             &lt;br&gt;        &#125;&lt;br&gt;&#125;&lt;br&gt;int main (int argc, char *argv&#091;&#093;) &#123;&lt;br&gt;     setlocale( LC_CTYPE, &quot;.1251&quot; );&lt;br&gt;if (argc  == 1) &#123;&lt;br&gt;printf(&quot;Enter the string!&quot;);   &lt;br&gt;return 0;&lt;br&gt;&#125; &lt;br&gt;if (argc &amp;gt; 1) &#123;&lt;br&gt;         char *a=argv&#091;1&#093;;&lt;br&gt;         int z = 0;&lt;br&gt;while (argv&#091;1&#093;&#091;z&#093; != 0) &#123;&lt;br&gt;      ++z;&lt;br&gt;        &#125;&lt;br&gt;        stev(argv&#091;1&#093;, z); &lt;br&gt;        printf(&quot;&#037;s&quot;, a);&lt;br&gt;         &#125;   &lt;br&gt;&#125;&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (dcc0)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#31</link>
    <pubDate>Fri, 16 Sep 2016 08:26:40 GMT</pubDate>
    <description>Последний пост.&lt;br&gt;Код моего урезанного substr отрабатывает корректно только два варианта, т.е. с двумя или тремя аргументами.&lt;br&gt;substr(string 0 1)&lt;br&gt;substr(string 1)&lt;br&gt; Больше мне и не нужно было, код довольно запутанный и не аккуратный, выкладываю только для того, чтобы если кому-то придёт мысль написать свой substr, можно посмотреть, как я мыслил. Код свое отработал и переворот, и substr писались для алгоритма нерекурсивных перестановок на чистом си, в целях обучения все тому же си. &lt;br&gt;Правда, получилось не совсем чистый си, хотелось без библиотек ,  пришлось заюзать&lt;br&gt;stdlib.h , так как понадобилось преобразование типов из char в int - функция atoi&lt;br&gt;&lt;br&gt;Код не чистил:&lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;tchar.h&amp;gt; &lt;br&gt;#include &amp;lt;locale.h&amp;gt;&lt;br&gt;#ifdef UNICODE&lt;br&gt;    typedef wchar_t TCHAR;&lt;br&gt;#else&lt;br&gt;    typedef char TCHAR;&lt;br&gt;#endif&lt;br&gt;int main(int argc, char *argv&#091;&#093;)&lt;br&gt;&#123;&lt;br&gt;    setlocale( LC_CTYPE, &quot;.1251&quot; );&lt;br&gt; char *a=argv&#091;1&#093;;&lt;br&gt;&lt;br&gt;  &lt;br&gt;  if(argc &amp;lt; 2) &#123;&lt;br&gt;    printf(&quot;String is no set!&quot;);&lt;br&gt; return 0;&lt;br&gt;  &#125;&lt;br&gt;  int i = 0;&lt;br&gt;</description>
</item>

<item>
    <title>Нормальный ли код получился? (Переворот строки Си). (dcc0)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/10119.html#30</link>
    <pubDate>Fri, 16 Sep 2016 08:16:58 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; Т.е. должно быть &lt;br&gt;&amp;gt;&amp;gt; так примерно int n = strlen(argv&#091;1&#093;); &lt;br&gt;&amp;gt;&amp;gt; а потом &amp;gt; new_s = (char*) malloc(n*sizeof(char)); &lt;br&gt;&amp;gt;&amp;gt; И в конце free(new_s) &lt;br&gt;&amp;gt;&amp;gt; Верно ли теперь?&lt;br&gt;&amp;gt; Почти верно.&lt;br&gt;&amp;gt; Вместо int для размеров лучше использовать size_t.&lt;br&gt;&amp;gt; Выделять нужно не n, а n+1 байт: последний байт для нуль-терминатора.&lt;br&gt;&amp;gt; В С не нужно приводить результат malloc к типу, то есть (char*) &lt;br&gt;&amp;gt; не нужен.&lt;br&gt;&lt;br&gt;ОК, Спсибо огромное, все стало чуть-чуть яснее.&lt;br&gt;&lt;br&gt;Сила - Великая штука, у меня даже получилось сделать свой урезанный substr. &lt;br&gt;</description>
</item>

</channel>
</rss>
