Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
На msdn.microsoft.com есть пример. Пример запускается, работает, но ни чего не выводит. Попробовал добавить в пример Console.WriteLine - не получилось:
Ругается: Цитата: Вопрос - как можно вывести "A"? |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Если упростить пример, то работает:
|
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Т.е. во втором примере "небезопасный буфер" спокойно преобразуется в строку. А в первом примере почему то ругается...
|
Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
С некоторых пор появился stackoverflow на русском. Для пробы задал там этот вопрос ru.stackoverflow.com Посмотрим, что ответят.
|
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ответили уже
------------------ WBR, Igor |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Угу... Аж 4-ре раза... Сначала хотел написать, что "прежде чем дать совет - попробуй сам", но - решил ещё подождать.
Как то на хабре была статья (переводная) "Закат Stack Overflow" habrahabr.ru |
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
А зачем тебе это вообще понадобилось? Фишка нужна только для взаимодействия с неуправляемым кодом, при том весьма специфическим - структуры со "встроенными" массивами...
Конкретно "как вывести"
И использовать лучше перегрузку конструктора string принимающую ещё и смещение и размер буфера - т.к. если заполнить все 10 элементов, то нет гарантии что после этого массива окажется юникодный nul-символ, и "строка" может всякого мусора захватить в себя. Кстати, и прочих обычных "проверок и ограничений" этот небезопасный код не делает - например можно запросто присвоить значение 11-му элементу массива - т.е. записать данные ВНЕ его границ MSDN просто советует быть предельно осторожным - ну как в фоксе при работе с SYS(2600) записывающей что-либо в память. ------------------ WBR, Igor |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вывести именно fixedBuffer (как это сделано во 2-м примере), а не charPtr. |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Всегда интересно, почему код не заработал. IMHO, код
не должен порождать проблем. Исправлено 1 раз(а). Последнее : S-type, 27.03.17 20:49 |
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
2-й пример работает с value type, а первый - с reference type (он является перемещаемым, и, соответственно, структура внутри него тоже) - поэтому для него требуется "фиксация". Ну по крайней мере я так это понимаю.
------------------ WBR, Igor |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Выходит, до myC.myBuffer.fixedBuffer не достучаться...
|
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Напрямую через "кучу точек" наверное нет, а так - сделай себе копию структуры (она попадёт уже в стек и будет "неперемещаемой", т.е. не требующей "фиксации" для получения указателя) и будет по сути так же как в "варианте 2".
Только занафига это нужно, если под рукой уже есть готовый указатель char* charPtr - и он надлежащим образом "зафиксирован"? Точнее зафиксирован экземпляр класса, что и позволяет получать указатель на хранящуюся внутри него структуру. Кстати, эти fixed массивы тоже своего рода синтаксический сахар - в откомпилированном коде оно выглядит несколько иначе... ------------------ WBR, Igor |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Гениально... |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Опубликовал ответ на ru.stackoverflow.com , при этом честно указал, что мне помогли. Но, мой ответ почему то подкорректировали. В итоге, у меня сейчас в карме 16 и два каких то бронзовых знака.
|
Re: Небезопасный буфер | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Большому кораблю - |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Самому страшно
|
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
А чего второй вариант не привёл - он ведь более оптимален, не требует копирования структуры, да и в общем как-то более логичен...
------------------ WBR, Igor |
Re: Небезопасный буфер | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Речь о
Мне кажется, он интуитивно понятен. По крайней мере, это было первое, что мне пришло в голову. И уж потом родилась грешная мысль "а если без charPtr". |
Re: Небезопасный буфер | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну на том сайте он явно "не понятен" т.к. никто не предложил. Даже тот кто говорил о переносе cw внутрь fixed блока
------------------ WBR, Igor |
© 2000-2024 Fox Club  |