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);
}