我正在尝试将整数转换为char *指针,以便我可以将参数正确地发送到另一个函数中。如果没有atoi,有没有这样做呢?
int number=2123, number2= 1233;
char* arg[];
arg[0] = number;
arg[1] = number2;
**很抱歉没有说清楚,所以基本上我希望arg [0]等于数字的字符串rep,这样我就可以把它发送到这样的函数中:converted(char * arg);
我会更改参数数据类型,但它必须是要发送的指针。
答案 0 :(得分:0)
将整数转换为
char*
指针,以便我可以正确地将参数发送到另一个函数。
通过复合文字调用带有char
数组的辅助函数来转换数字,从而创建数字的字符串表示。该字符串对函数和代码块的末尾有效。足够的绳子尺寸很重要 - 留下一个单独的练习。此处的代码使用41,足以支持128位int
。对于如此小的缓冲区,无需通过malloc()/free()
进行内存管理。
char *my_itoa(char *dest, int i) {
sprintf(dest, "%d", i);
return dest;
}
#define ITOA(n) my_itoa((char [41]) { 0 }, (n) )
int main(void) {
int number=2123, number2= 1233;
printf("<%s> <%s>\n", ITOA(number), ITOA(number2));
printf("<%s> <%s> <%s>\n", ITOA(INT_MIN), ITOA(0), ITOA(INT_MAX));
}
输出
<2123> <1233>
<-2147483648> <0> <2147483647>
答案 1 :(得分:0)
如果你假设一个指针总是至少和一个整数大小相同(这有什么例外?)你可以安全地将整数转换为指针并返回这些宏:
#define INT2POINTER(a) ((char*)(intptr_t)(a))
#define POINTER2INT(a) ((int)(intptr_t)(a))
或者如果其他函数不是你的函数,而是一个想要整数作为字符串的函数你可以像这样使用asprintf():
asprintf(&arg[0],"%d",number);
asprintf(&arg[1],"%d",number2);
但asprintf不是posix标准,因此它可能并非在所有系统上都可用。您可以使用sprintf()(或snprintf(),以便安全起见),但是您需要先计算字符串长度。
答案 2 :(得分:-2)
以下是您正在寻找的功能:
char *int_to_char(int nb)
{
int div;
char *str;
int i;
int size;
int sign;
i = -1;
sign = 1;
size = get_int_lenght(nb);
if (!(str = malloc(sizeof(char) * (size + 1))))
return (NULL);
if (nb < 0)
{
sign *= -1;
nb *= -1;
}
if (nb == 0)
{
str[++i] = '0';
str[i + 1] = 0;
return (str);
}
while (nb > 0)
{
str[++i] = (nb % 10) + '0';
nb /= 10;
}
if (sign < 0)
str[++i] = '-';
str[i + 1] = 0;
return (my_revstr(str));
}
使用revstr功能:
char *my_revstr(char *str)
{
int i;
int j;
char tmp;
i = -1;
j = strlen(str);
while (++i < j)
{
tmp = str[i];
str[i] = str[--j];
str[j] = tmp;
}
return (str);
}
get_int_lenght功能:
int get_int_lenght(int nb)
{
int size;
size = 0;
if (nb <= 0)
{
size++;
nb *= -1;
}
while (nb > 0)
{
size++;
nb /= 10;
}
return (size);
}