1. Си / Говнокод #15588

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    int minus(int ch)
    {
    if (ch < 0)
    {
    char buf[255];
    char *chs = itoa(ch);
    char *chsn = (char*)calloc(1, strlen(chs)+1];
    memset(chsn, 0, strlen(chs)+1);
    chsn[0] = '-';
    for (int i = 1, int j = 0; j < strlen(chs); i++, j++)
    {
    chsn[i] = chs[j];
    }
    int ret = atoi(chsn);
    return ret;
    }
    else
    {
    char buf[255];
    char *chs = itoa(ch);
    char *chsn = (char*)calloc(1, strlen(chs)+1];
    memset(chsn, 0, strlen(chs)+1);
    for (int i = 1, int j = 0; i < strlen(chs); i++, j++)
    {
    chsn[j] = chs[i];
    }
    int ret = atoi(chsn);
    return ret;
    }
    }

    Запостил: gost, 27 Марта 2014

    Комментарии (7) RSS

    • >itoa зачем она такая \:
      void* itoa(int input, char *buffer, int radix);
      Ответить
      • > itoa()
        > void* itoa(int input, char *buffer, int radix);
        Это что-за покемоны?
        Ответить
    • itoa - функция, возвращающая указатель на временный буфер, сидящий на стеке?
      интересная идея
      царская
      Ответить
      • Да эта itoa мало того, что непереносимая, так она еще и вообще нинужная. Ибо спринтф с головой покрывает все ее юзкейсы.

        А буфер у нее не на стеке а в тред локал статике.
        Ответить
        • Да, но она, в отличие от спринтфа, не требует заведения отдельного буфера.
          Например
          printf("%s%s", itoa(4), itoa(2));
          очень удобно, не надо думать про лишние переменные

          в студии должна вывести "44"
          Ответить

    Добавить комментарий