Проблема передачи указателя на строку

158
27 апреля 2018, 14:12

Передаю _TCHAR указатель в функцию

void foo(_TCHAR* somestring)

где somestring глобально объявленный TCHAR[200], далее вызываю

RegSetValueEx(..., REG_SZ, (BYTE*)somestring, sizeof(somestring));

И записывается только первый символ.

Answer 1

Если somestring глобальный, то его не надо передавать в функцию - он виден и так, потому он и глобальный :) И тогда - если он виден как TCHAR[200] - выражение sizeof(somestring) будет размером этого массива.

Но когда вы передаете его в функцию как void foo(_TCHAR* somestring), глобальная переменная становится скрыта, и под именем somestring в теле функции выступает уже совсем другая переменная - локальный аргумент-указатель. И для него sizeof(somestring) - размер не массива, а указателя, со всеми вытекающими последствиями.

Передавайте в функцию foo еще и длину для записи в реестр.

READ ALSO
Решить С++ срочно надо [требует правки]

Решить С++ срочно надо [требует правки]

Решите пожалуйста 1)Дан двумерный массивПоменять местами вторую и четвертую строки 2)Все элементы массива, сумма индексов которых нечетна,...

162
Где в Linux взять таймер вызывающий события?

Где в Linux взять таймер вызывающий события?

Мне понадобился таймер который по истечению какого то времени вызывает событие, например std::functionВ Win32 API и в C# я очень часто использовал такие...

179
Оформить в виде класса

Оформить в виде класса

Помогите переделать програмку, чтобы она была оформлена как 3 файла - maincpp, class

172
Как сделать для Combobox SCROLL?

Как сделать для Combobox SCROLL?

Мне нужно сделать для Combobox SCROLL, но я не нашелДля едита есть ES_AUTOVSCROLL, а от для Combobox нету

162