Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Если у Вас есть станд.:: объект wstring, можно звонить c_str()
на нем для получения wchar_t*
:
std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();
, Так как Вы воздействуете на узкую строку, однако, необходимо было бы сначала расширить ее. Здесь существуют различные варианты; нужно использовать Windows, встроенный MultiByteToWideChar
стандартная программа. Это даст Вам LPWSTR
, который эквивалентен wchar_t*
.
Сначала преобразуйте его в станд.:: wstring:
std::wstring widestr = std::wstring(str.begin(), str.end());
Тогда получают струну до:
const wchar_t* widecstr = widestr.c_str();
Это только работает на строки ASCII, но это не будет работать, если базовая строка будет закодированным UTF-8. Используя подпрограмму преобразования как MultiByteToWideChar () гарантирует, что этот сценарий обрабатывается правильно.
Можно использовать текстовые макросы преобразования ATL для преобразования узкой (символьной) строки в широкое (wchar_t) один. Например, для преобразования станд.:: строка:
#include <atlconv.h>
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);
можно также определить кодовую страницу, поэтому если станд.:: строка содержит символы UTF-8, которые можно использовать:
CA2W pszWide(str.c_str(), CP_UTF8);
Очень полезный но Windows только.
Если вы используете Linux/Unix, посмотрите на mbstowcs () и wcstombs (), определенные в GNU C (из ISO C 90).
Мбайт соответствует «Multi Bytes Последовательности» и в основном является обычным нулевым окончанием C последовательности.
wcs - это последовательность Wide Char и представляет собой массив wchar_t.
Для получения более подробной информации о широких знаках см. документацию по glibc здесь .