在C中如何在不使用snprintf或itoa的情况下将int转换为char []?

时间:2011-05-23 00:18:27

标签: c type-conversion

把头发拉出来,但我需要在不使用snprintf或itoa的情况下将int转换为C中的字符串。有什么建议吗?

我尝试使用:

/*
**  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;
}

...但它在*str++ = "0123456789abcdefghijklmnopqrstuvwxyz"[(int)r.rem];上给了我一个EXE_BAD_ACCESS。

1 个答案:

答案 0 :(得分:3)

我猜你没有分配任何记忆。

str需要是一个指向已分配内存块的指针,该块足够大,足以适合函数创建的字符串。

此功能不分配任何内存。您需要在调用函数之前执行此操作,然后将指针传入。

相关问题