C 在保证不使用堆内存的情况下,将长字符串转换为字符串

C 在保证不使用堆内存的情况下,将长字符串转换为字符串,c,visual-studio-2010,C,Visual Studio 2010,我试图在内存分配器中将长字符串转换为字符串,因此需要避免使用堆内存 我曾考虑过使用sprintf,但后来它在调用堆栈中使用了堆内存。i、 e.LocaleUpdate。有没有一种简单的方法可以做到这一点?你能在堆栈分配的固定大小数组上实现你自己的(简化的)itoa()吗?类似于strtok(它使用静态本地存储)的东西怎么样,它在后续调用中返回下一个数字。您可以编写它,以便在数字减为零时返回\0。唯一的问题是需要多个调用…如果这是您当前缺少的部分:sizeof(long)*CHAR\u BIT/(

我试图在内存分配器中将长字符串转换为字符串,因此需要避免使用堆内存


我曾考虑过使用
sprintf
,但后来它在调用堆栈中使用了堆内存。i、 e.
LocaleUpdate
。有没有一种简单的方法可以做到这一点?

你能在堆栈分配的固定大小数组上实现你自己的(简化的)
itoa()
吗?类似于
strtok
(它使用静态本地存储)的东西怎么样,它在后续调用中返回下一个数字。您可以编写它,以便在数字减为零时返回
\0
。唯一的问题是需要多个调用…如果这是您当前缺少的部分:
sizeof(long)*CHAR\u BIT
/
(log(10)/log(2))
/**
 * Convert a long to a string in a provided buffer.
 *
 * @param n      The long to convert to a string
 * @param s      The buffer to build the string in. Should be
 *               long enough to hold as big a string as a
 *               negative long with a terminating zero can be.
 *
 * @return A pointer to the result of the conversion.
 */
char* itoaish(long n, char* s)
{
    int negative = 0;
    char* p = &s[11];
    if(0 > n)
    {
        negative = 1;
        n = -n;
    }
    *p = 0;
    if(!n)
    {
        *--p = '0';
    }
    while(n)
    {
        *--p = '0' + n % 10;
        n /= 10;
    }
    if(negative)
    {
        *--p = '-';
    }
    return p;
}

main()
{
    long n = -1234567890;
    char s[12];
    char* p = itoaish(n,s);
    printf("%s",p);
}