2012-05-26 3 views
0

Не могли бы вы объяснить, почему для того, чтобы преобразовать массив символов, как это:символа [] против LPCSTR странного поведения

char strarr[5] = {65,83,67,73,73}; //ASCII 

В LPCSTR быть принята GetModuleHandleA() и GetProcAddress(), я должен первым добавить 0 к конец ?

т.е. у меня есть:

char strarr[6] = {65,83,67,73,73,0}; 

И только затем конвертировать в (LPCSTR)&strarr.

По какой-то причине я не получаю первый, который работает только иногда (т. Е. Если я не добавляю 0 в конце), а если я добавлю ноль в конце - эта работа все время. Почему я должен добавить ноль?

О, и вопрос стороны - почему в C++ я должен явно указать размер массива в [], когда я инициализирую его с элементами сразу? (Если я не укажу размер, то это не сработает)

Спасибо.

+0

Я сделал ваш вопрос немного более удобочитаемым. Пожалуйста, сделайте это самостоятельно в следующий раз, чтобы дать вашим вопросам лучшие шансы на ответ. – ereOn

+0

Спасибо. Я буду. –

ответ

3

Эти функции ожидают NULL завершенные строки.

Поскольку вы указали только указатель на массив символов, они не могут знать его размер, поэтому необходимо указать конкретное значение (завершающий символ NULL), чтобы указать конец строки.

+0

О, я вижу. Спасибо за быстрый ответ. Должен ли я также добавлять 0 к массивам символов, когда ожидаемое значение - const char *, а не LPCSTR? –

+1

Его символ ASCII 'NUL', а не' NULL'. – SuperSaiyan

+0

@George Да, почти все строки в C являются символьными массивами с нулевым символом. –