2013-07-03 1 views
0

В моем коде у меня есть массив wchar_t:Невозможно создать массив wchar_t

wchar_t paths [6] = {L"C:\\Program Files\\SomeAppsSuiteFolder1", L"C:\\Program Files\\SomeAppsSuiteFolder2", L"C:\\Program Files (x86)\\SomeAppsSuiteFolder1", L"C:\\Program Files (x86)\\SomeAppsSuiteFolder2", L"C:\\SomeAppsSuiteFolder1", L"C:\\SomeAppsSuiteFolder2"}; 

Позже я использовать массив в for цикле. Проблема заключается в том, что для этой строки я получаю следующие ошибки:

error: too many initializers for 'wchar_t [6]' 
error: initializer-string for array of chars is too long [-fpermissive] 

Более того, в for цикле у меня есть if условный, как это:

if(GetFileAttributesW(paths[i])!=INVALID_FILE_ATTRIBUTES) {...} 

И, опять же, я получаю ошибку здесь :

error: invalid conversion from 'wchar_t' to 'LPCWSTR {aka const wchar_t*}' [-fpermissive] 

Странно, аналогичный код, используемый для правильной сборки несколько месяцев назад ... В чем проблема?

+2

'wchar_t' только широкий характер, а не строка. Вы пытаетесь инициализировать массив символов с (широкими) строковыми значениями. –

ответ

5

Вам нужно

const wchar_t* paths[6] = .... 
+0

Я, должно быть, непреднамеренно удалил '*' ... Спасибо – burtek

3

Вы должны использовать:

wchar_t *paths[6] = ... 
     ^

wchar_t является одного (широкий) характер, а не строка из них.

Итак, если вы хотите массив широких строк ,, вы должны использовать вариант указателя.

Декларатор wchar_t xyzzy[6] дает вам шесть символов вместо шести символов.