Отправляет email-рассылки с помощью сервиса Sendsay

[prg] как привести std::string к c-строкам

Здравствуйте.
Извиняюсь, за возможно, глупый вопрос, но все же...
как привести std::string к C-строкам?
Заранее спасибо за ответ.

Ответить   Sat, 05 Oct 2013 02:01:29 +0700 (#2839309)

 

Ответы:

Здравствуйте, дима.

Самое простое - через метод string::c_str()
Но если строки у вас не в непрерывном блоке памяти, то может значительно
просесть производительность.
Успехов. Никита.

Ответить   Fri, 4 Oct 2013 23:16:52 +0400 (#2839319)

 

Приветствую всех.

А какие ещё варианты?

С этого места поподробнее, пожалуйста... О каких блоках памяти и строках идёт
речь?

Успехов. Анатолий.

Ответить   "i_chay" Sat, 5 Oct 2013 17:13:27 +0300 (#2839902)

 

Здравствуйте, "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>, который может по требованию всегда хранить данные в
непрерывном блоке. Но здесь мне уже нечего сказать. :-)
(Готовых ссылок нет. Разве что на какой-нибудь пеонерский форум, откуда я
этого и набрался.)
Успехов. Никита.

Ответить   Sat, 5 Oct 2013 17:43:29 +0400 (#2839923)

 

Приветствую всех.

Вероятнее всего, это будет тот же самый адрес, что и при вызове c_str().

в себе сам string.

А в случае test[0] тоже должен построить эквивалентную C-строку?

А есть ли реализации, где данные в std::string хранятся в фрагментарно?
Понятно, что можно создать кастомный allocator с изощрённой логикой управления
памятью (но на такой allocator стоит возложить ответственность за дефрагментацию
памяти).
А на практике есть ли реализации stl с фрагментарными данными?

Ответить   "i_chay" Sat, 5 Oct 2013 19:39:14 +0300 (#2839997)

 

Здравствуйте, "i_chay".

Поскольку на уровне стандарта обратное не доказано, т.е. не закреплена
непрерывность, следует исходить из этого.

"...контейнер string не гарантирует хранения данных в непрерывном блоке
памяти" (http://cpp.com.ru/meyers/ch2.html). Более продвинутый источник
сходу не нашёлся.
Как я понимаю, фокус в том, что большинство реализаций, действительно, всё
делает непрерывным блоком, но на уровне стандарта (по крайней мере, так было
до последнего времени) это не закреплено, и я встречал упоминания
реализаций, где это вроде не так. Однако на практике я с этим никогда не
сталкивался, правда я в принципе не знаток извращений в этой области, но
думаю, что людям нет резона врать.
Успехов. Никита.

Ответить   Sat, 5 Oct 2013 20:05:16 +0400 (#2840006)

 

Приветствую!

Подскажите, правильно ли я понял, что подпись элементов нужно производить в
файлах, которые находятся в папке 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"
*

всех благ!

Ответить   Wed, 9 Oct 2013 15:22:32 +0800 (#2842556)

 

Здравствуйте, Т'Сад.

Вам в неё надо дописать специальный атрибут дополнительного описания, в
значении которого и прописывается текстовая подпись для служб доступности:
android:contentDescription="@string/add_note"
Успехов. Никита.

Ответить   Wed, 9 Oct 2013 21:17:36 +0400 (#2842959)

 

Приветствую!

Подскажите, если не затруднит,есть ли где-нибудь список атрибутов для
приславутой службы доступности с описаниями в скомпанованном разделе, а не в
разброс?

всех благ!
Александр

Ответить   Thu, 10 Oct 2013 23:52:10 +0800 (#2843989)

 

Здравствуйте, Т'Сад.

Ну "атрибуты" - это лишь малая часть всей истории. Вообще же всё это есть в
соответствующих разделах документации, в стандартном структурированном виде.
Для общего ознакомления с Accessibility API, как мне кажется, вполне
достаточно. Если же вы решаете какую-то определённую задачу, то возможно
имеет смысл её конкретизировать, и тогда может вам смогут помочь более
предметно.
Вот ссылка, откуда имеет смысл начинать комплексное знакомство:
http://developer.android.com/guide/topics/ui/accessibility/index.html
Есть сторонние материалы, агрегирующие основные вещи, в т.ч. и на русском,
но боюсь, они во многом уже устарели, а новых пока не написано.
Успехов. Никита.

Ответить   Fri, 11 Oct 2013 01:10:27 +0400 (#2844270)

 

Приветствую всех.

Если подпись не меняется во время работы приложения, то да. Если хотите менять
подпись произвольным образом в течение run-time, то можно воспользоваться методом
View.setContentDescription("текст_метки").
Кроме того, для api level 16 и выше поддерживается метод View.announceForAccessibility("текст_сообщения"),
при помощи которого вы можете средствами активного скринридера озвучить или отобразить
на брайлевском дисплее произвольный текст.

Успехов. Анатолий.

Ответить   "i_chay" Thu, 10 Oct 2013 06:30:11 +0300 (#2843248)