将Int转换为char *指针

时间:2017-09-26 22:22:57

标签: c

我正在尝试将整数转换为char *指针,以便我可以将参数正确地发送到另一个函数中。如果没有atoi,有没有这样做呢?

int number=2123, number2= 1233; 
char* arg[];

arg[0] = number;
arg[1] = number2;

**很抱歉没有说清楚,所以基本上我希望arg [0]等于数字的字符串rep,这样我就可以把它发送到这样的函数中:converted(char * arg);

我会更改参数数据类型,但它必须是要发送的指针。

3 个答案:

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