Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

std::string в char* - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив: используя операции + или -, из элементов массива получить в итоге значение больше 7 http://www.cyberforum.ru/cpp-beginners/thread602685.html
С клавиатуры задается массив чисел. Нужно, используя операции + или - получить в итоге значение больше 7. Причем предложить все возможные варианты. Что-то вроде того? #include <iostream> ...
C++ Рекурсивная функция, число и показатель степени Ребят помогите пожалуйста не могу понять как решить данную задачу: Напишите программу, которая запрашивает число и показатель степени.Напишите рекурсивную функцию, которая возводит число в степень... http://www.cyberforum.ru/cpp-beginners/thread602675.html
Нахождение минимального кол-ва слов C++
Подскажите как мне найти строку, содержащую наименьшее количество слов, и вывести её на экран монитора? в программе register char *mas = new char; register char *m = mas; register char *uk; ...
C++ Ошибка "error C2011: переопределение типа"
struct Tunit { public : int team; int team_agricultural; POINT location; POINT moveLocation; float max_helf; float current_helf; int ID_cel;
C++ Вычислить сумму элементов матрицы http://www.cyberforum.ru/cpp-beginners/thread602614.html
Как вычислить сумму положительных элементов матрицы А размером N*N, расположенных над главной диагональю?
C++ Перевести с паскаля на с++ Люди) есть проблемко с курсовой задачкой, вроде как нашел нужную, да вот только она не на том языке что мне нужен =( задачка большая, звучит так: Создать список, содержащий сведения об отправлении... подробнее

Показать сообщение отдельно
Bers
Заблокирован
11.06.2012, 14:56
Цитата Сообщение от taras atavin Посмотреть сообщение
Можно ли привести std::string к указателю на нуль-терминальную строку? Как?
Нельзя.

Но можно сделать эквивалентную по смыслу операцию:

C++
1
2
3
4
5
6
7
8
9
int main()
{
    std::string test("trololo");
 
    char* ptr = &test[0]; //получаем указатель на первый символ си-строчки
 
    std::cout<<ptr<<std::endl;
    return 0;
}
Но крайне не рекомендуется. Ибо нет никакой гарантии, что внутреннее хранилище стринга является непрерывным блоком памяти.
(разные реализации стандартной библиотеки могут по разному реализовывать std::string)

Безопасным способом является получение си-строки через метод: string::c_str()
Однако, данный метод обязан вернуть указатель на си-строку эквивалентную тому значению, что хранит в себе сам стринг. Это означает, что если стринг хранит данные не в непрерывном блоке памяти, то ему придётся выполнить ряд действий по созданию такого непрерывного блока памяти, чтобы предоставить указатель на него наружу, что приведет к падению производительности.

Если нужно гарантировать возможность быстрой работы, то можно использовать std::vector<char>, который исходя из ряда требований к контейнеру всегда хранит данные в непрерывном блоке памяти. И тогда запись:

C++
1
char* ptr = &test[0];
гарантированно будет валидна.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru