как избавиться от - "предупреждение: преобразование в не указатель типа 'char' из NULL"? - PullRequest
3 голосов
/ 18 мая 2011

У меня есть этот блок кода:

int myFunc( std::string &value )
{
    char buffer[fileSize];
    ....
    buffer[bytesRead] = NULL;
    value = buffer;
    return 0;
}

Строка - buffer [bytes] = NULL дает мне предупреждение: преобразование в не указатель типа 'char' из NULL. Как мне избавиться от этого предупреждения?

Ответы [ 3 ]

22 голосов
/ 18 мая 2011

Не использовать NULL? Обычно он зарезервирован для указателей, и у вас нет указателя, только простой char. Просто используйте \0 (нулевой терминатор) или простой 0.

3 голосов
/ 18 мая 2011

buffer[bytesRead] = 0; // NULL предназначен для указателей

В качестве предложения, если вы хотите избежать копирования и все остальное, ниже может быть рассмотрено.

int myFunc (std::string &value)
{
  s.resize(fileSize);
  char *buffer = const_cast<char*>(s.c_str());
  //...
  value[bytesRead] = 0;
  return 0;
}
1 голос
/ 18 мая 2011

NULLNUL.

NULL - это константа, представляющая нулевой указатель на C и C ++.

NUL - это символ ASCII NUL, который в C и C ++ завершает строки и представляется как \0.

Вы также можете использовать 0, что в точности совпадает с \0, поскольку в C литералы символов имеют тип int. В C ++ символьные константы имеют тип char.

...