[prg] как привести std::string к c-строкам
Здравствуйте.
Извиняюсь, за возможно, глупый вопрос, но все же...
как привести std::string к C-строкам?
Заранее спасибо за ответ.
← Октябрь 2013 → | ||||||
2
|
3
|
6
|
||||
---|---|---|---|---|---|---|
7
|
8
|
|||||
14
|
15
|
16
|
17
|
18
|
19
|
|
23
|
24
|
27
|
||||
29
|
31
|
За последние 60 дней 4 выпусков (1-2 раза в месяц)
Сайт листа:
http://www.tiflocomp.ru/
Открыт:
19-10-2011
Пре-модерация: Нет
Адрес для писем в лист: industry.comp.tiflocomp.programming-list@subscribe.ru
Здравствуйте.
Извиняюсь, за возможно, глупый вопрос, но все же...
как привести std::string к C-строкам?
Заранее спасибо за ответ.
Приветствую всех.
А какие ещё варианты?
С этого места поподробнее, пожалуйста... О каких блоках памяти и строках идёт
речь?
Успехов. Анатолий.
Здравствуйте, "i_chay".
int main() {
std::string test("hello");
char* ptr = &test[0];
std::cout<<ptr<<std::endl;
return 0;
}
Только давайте без мата. :-)
Ну насколько я теоретически осведомлён в этом вопросе, string::c_str()
обязан вернуть указатель на C-строку эквивалентную тому значению, что хранит
в себе сам string. Ну а если string хранит данные не в непрерывном блоке
памяти, то ему нужно будет проделать ряд манипуляций по созданию такого
блока, а значит последуют дополнительные затраты.
Правда, вы наверное сейчас будете меня убивать по средством
std::vector<char>, который может по требованию всегда хранить данные в
непрерывном блоке. Но здесь мне уже нечего сказать. :-)
(Готовых ссылок нет. Разве что на какой-нибудь пеонерский форум, откуда я
этого и набрался.)
Успехов. Никита.
Приветствую всех.
Вероятнее всего, это будет тот же самый адрес, что и при вызове c_str().
в себе сам string.
А в случае test[0] тоже должен построить эквивалентную C-строку?
А есть ли реализации, где данные в std::string хранятся в фрагментарно?
Понятно, что можно создать кастомный allocator с изощрённой логикой управления
памятью (но на такой allocator стоит возложить ответственность за дефрагментацию
памяти).
А на практике есть ли реализации stl с фрагментарными данными?
Здравствуйте, "i_chay".
Поскольку на уровне стандарта обратное не доказано, т.е. не закреплена
непрерывность, следует исходить из этого.
"...контейнер string не гарантирует хранения данных в непрерывном блоке
памяти" (http://cpp.com.ru/meyers/ch2.html). Более продвинутый источник
сходу не нашёлся.
Как я понимаю, фокус в том, что большинство реализаций, действительно, всё
делает непрерывным блоком, но на уровне стандарта (по крайней мере, так было
до последнего времени) это не закреплено, и я встречал упоминания
реализаций, где это вроде не так. Однако на практике я с этим никогда не
сталкивался, правда я в принципе не знаток извращений в этой области, но
думаю, что людям нет резона врать.
Успехов. Никита.
Приветствую!
Подскажите, правильно ли я понял, что подпись элементов нужно производить в
файлах, которые находятся в папке Res\"layout"?
И если да, то как тогда отредактировать, к примеру, такую строку?-
*
<ImageButton android:id="@id/btnPrev"
android:background="@drawable/widget_btn_prev"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="4.0dip" android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
*
всех благ!
Здравствуйте, Т'Сад.
Вам в неё надо дописать специальный атрибут дополнительного описания, в
значении которого и прописывается текстовая подпись для служб доступности:
android:contentDescription="@string/add_note"
Успехов. Никита.
Приветствую!
Подскажите, если не затруднит,есть ли где-нибудь список атрибутов для
приславутой службы доступности с описаниями в скомпанованном разделе, а не в
разброс?
всех благ!
Александр
Здравствуйте, Т'Сад.
Ну "атрибуты" - это лишь малая часть всей истории. Вообще же всё это есть в
соответствующих разделах документации, в стандартном структурированном виде.
Для общего ознакомления с Accessibility API, как мне кажется, вполне
достаточно. Если же вы решаете какую-то определённую задачу, то возможно
имеет смысл её конкретизировать, и тогда может вам смогут помочь более
предметно.
Вот ссылка, откуда имеет смысл начинать комплексное знакомство:
http://developer.android.com/guide/topics/ui/accessibility/index.html
Есть сторонние материалы, агрегирующие основные вещи, в т.ч. и на русском,
но боюсь, они во многом уже устарели, а новых пока не написано.
Успехов. Никита.
Приветствую всех.
Если подпись не меняется во время работы приложения, то да. Если хотите менять
подпись произвольным образом в течение run-time, то можно воспользоваться методом
View.setContentDescription("текст_метки").
Кроме того, для api level 16 и выше поддерживается метод View.announceForAccessibility("текст_сообщения"),
при помощи которого вы можете средствами активного скринридера озвучить или отобразить
на брайлевском дисплее произвольный текст.
Успехов. Анатолий.
Здравствуйте, дима.
Самое простое - через метод string::c_str()
Но если строки у вас не в непрерывном блоке памяти, то может значительно
просесть производительность.
Успехов. Никита.