Проблему с массивом строк не могу понять ... - страница 2

 
Rosh:
Chen:

Еще одно наблюдения. Я третьего дня поднимал аналогичный вопрос, но в более общем виде: Как определить пустую строковую переменную? Были предложены решения выхода из этой ситуации (спасибо откливнушимся), но вопрос так и остался открытым. Поскольку остальные не придали значения обсуждению (как разработчики, так и тредстартер, пока его тот же петух в то ж-ж-е место не клюнул ;), я пользуюсь случаем спросить авторитетного мнения Rosh'а:

Я не силен в Си, и траблы с передачей строковых переменных в dll не могу объяснить. Сам как-то наступал на такие грабли (Crash в "About"). Хотя с тех пор я лучше представляю механизм распределения памяти под переменные, но давать советы и решения все же не берусь.

Благодарю за ссылку. Изучу на досуге. Буду на Ваших граблях учиться :)
 

Да, совет Роша помог. Спасибо!

 

В своё время мы убрали вывод в лог сообщений об ошибках 4002, 4008 и 4009. Вызовите GetLastError() после первого же обращения к неинициализированной строке массива и Вы получите 4009.

 
stringo:

В своё время мы убрали вывод в лог сообщений об ошибках 4002, 4008 и 4009. Вызовите GetLastError() после первого же обращения к неинициализированной строке массива и Вы получите 4009.


Но вообще опертор типа PosComments[i] = PosComments[i] + "Z" есть эквивалент работы со строковаой переменной

string CommentStr;

CommentStr = CommentStr + "Z";

Во втором случае тоже надо инициализировать сначала строку явно?

Мне же кажется, если применяется оператор CommentStr + "Z" к неинициализированной строке, то она должна по умолчанию быть инициализировна пустой строкой и выделена память для строкового объекта CommentStr. Хотя возможно это замедлит выполнение оператор объединения строк "+". Но не думаю что условие проверки скрадёт много процессорного времени.

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