Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
РЕДАКТИРОВАНИЕ: Извините, я должен был помнить, что эта машина решительно нестандартна, включив различный нестандартный 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 это помогает!
Я использовал _itoa (...) на RedHat 6 и компиляторе GCC. Это работает.
Как Матовый J записал, существует itoa
, но это не стандартно. Ваш код будет более портативным, если Вы будете использовать snprintf
.
При вызове его много, совет "просто, использование 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); }