Ноль в Atoi преобразует значение в 0

В моей программе у меня есть массив char (char data[]), из которого я должен извлечь данные и сохранить их в целочисленной переменной (value). Для этого я использовал atoi в своей программе. Проблема в том, что я иногда получаю значение null в массиве char (data). Если я использую atoi для этого значения, я получаю значение 0 в целочисленной переменной вместо (null)

Реальная функция довольно большая, и я не могу опубликовать весь код здесь. От функции, упомянутой ниже, я надеюсь, что вы, ребята, получите некоторое представление о том, что я делаю здесь.

Get_Data(char data[])
{
    int value;
    value = atoi(p);
}

Недавно я прочитал, что мы должны использовать strtol вместо atoi. Я тоже это попробовал. но я все еще получаю 0 в значении переменной.

Я хочу знать, какую функцию я должен использовать, чтобы получить (ноль) в целочисленной переменной значение?

Здесь я имею в виду пустой массив символов

Пожалуйста, предоставьте решения, специфичные для проблемы. В приведенной выше функции, если данные получают пустое значение char, как мне убедиться, что моя переменная int также получает пустое значение, а не ноль?

3 ответа

Атои вернуть ноль для

Если первая последовательность непробельных символов в str не является допустимым целым числом или если такой последовательности не существует, поскольку либо str пуста, либо содержит только пробельные символы, преобразование не выполняется и возвращается ноль.

Также вы требуете для возвращения NULL невозможно, потому что вы назначаете эти значения в int а также int не могу удержаться NULL,

Потому что Атои пытается читать столько, сколько может.

Вместо этого вы должны использовать strtol, вот так:

char* endptr = NULL
char* myString = "OUPS";
long n = strtol(myString, &endptr, 10);

if (*endptr != '\0') {
  // ERROR
}

Прочитайте ссылку ссылку для более подробного объяснения (и пример тоже).

Разве это не хорошо?

В C++ нет значения Integer, записанного как null

NULL в целочисленной форме - только 0.

Другие вопросы по тегам