В C Как я могу преобразовать int в char [] без использования snprintf или itoa? - PullRequest
1 голос
/ 23 мая 2011

Вытаскиваю здесь волосы, но мне нужно преобразовать int в строку в C без использования snprintf или itoa. Есть предложения?

Я пытался использовать:

/*
**  LTOSTR.C -- routine and example program to convert a long int to
**  the specified numeric base, from 2 to 36.
**
**  Written by Thad Smith III, Boulder, CO. USA  9/06/91 
**  and contributed to the Public Domain.
**  
**  src: http://www8.cs.umu.se/~isak/snippets/ltostr.c
*/

#include <stdlib.h>

char *                  /* addr of terminating null */
ltostr (
    char *str,          /* output string */
    long val,           /* value to be converted */
    unsigned base)      /* conversion base       */
{
    ldiv_t r;           /* result of val / base */

    if (base > 36)      /* no conversion if wrong base */
    {
        str = '\0';
        return str;
    }
    if (val < 0)    *str++ = '-';
    r = ldiv (labs(val), base);

    /* output digits of val/base first */

    if (r.quot > 0)  str = ltostr (str, r.quot, base);

    /* output last digit */

    *str++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];
    *str   = '\0';
    return str;
}

... но это дает мне EXE_BAD_ACCESS на *str++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];.

1 Ответ

3 голосов
/ 23 мая 2011

Полагаю, вы не выделяете память.

str должен быть указателем на блок выделенной памяти, достаточно большой, чтобы соответствовать строке, создаваемой функцией.

Эта функция не выделяет никакой памяти. Это необходимо сделать перед вызовом функции, а затем передать указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...