Где функция itoa в Linux?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
130
задан David Guyon 3 June 2014 в 14:42
поделиться

4 ответа

РЕДАКТИРОВАНИЕ: Извините, я должен был помнить, что эта машина решительно нестандартна, включив различный нестандартный libc, реализации в академических целях ;-)

Как itoa() действительно нестандартно, как упомянуто несколькими услужливыми комментаторами, лучше использовать sprintf(target_string,"%d",source_int) или (еще лучше, потому что это безопасно от переполнения буфера) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int). Я знаю, что это не совсем так же кратко или прохладно как itoa(), но по крайней мере можно Записать Однажды, Выполнение Везде (TM) ;-)

Вот старый (отредактированный) ответ

, Вы корректны в заявлении, что значение по умолчанию gcc libc не включает itoa(), как несколько других платформ, из-за него не технически быть частью стандарта. См. здесь для немного большего количества информации. Обратите внимание, что Вы имеете к [1 117]

#include <stdlib.h>

, Конечно, Вы уже знаете это, потому что Вы хотели к [1 113] использование itoa() на Linux после возможного использования его на другой платформе, но... код (украденный от ссылки выше) будет похож:

Пример

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
  int i;
  char buffer [33];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  itoa (i,buffer,10);
  printf ("decimal: %s\n",buffer);
  itoa (i,buffer,16);
  printf ("hexadecimal: %s\n",buffer);
  itoa (i,buffer,2);
  printf ("binary: %s\n",buffer);
  return 0;
}

Вывод:

Enter a number: 1750
decimal: 1750
hexadecimal: 6d6
binary: 11011010110

Hope это помогает!

93
ответ дан 24 November 2019 в 00:25
поделиться

Я использовал _itoa (...) на RedHat 6 и компиляторе GCC. Это работает.

0
ответ дан 24 November 2019 в 00:25
поделиться

Как Матовый J записал, существует itoa, но это не стандартно. Ваш код будет более портативным, если Вы будете использовать snprintf.

6
ответ дан 24 November 2019 в 00:25
поделиться

При вызове его много, совет "просто, использование snprintf" может быть раздражающим. Таким образом, вот то, что Вы, вероятно, хотите:

const char *my_itoa_buf(char *buf, size_t len, int num)
{
  static char loc_buf[sizeof(int) * CHAR_BITS]; /* not thread safe */

  if (!buf)
  {
    buf = loc_buf;
    len = sizeof(loc_buf);
  }

  if (snprintf(buf, len, "%d", num) == -1)
    return ""; /* or whatever */

  return buf;
}

const char *my_itoa(int num)
{ return my_itoa_buf(NULL, 0, num); }
12
ответ дан 24 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: