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

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, 18:26
Цитата Сообщение от diagon Посмотреть сообщение
А мне казалось, что возвращается указатель на строку в объекте.
Я это так понимаю:
Если внутри стринга данные лежат в непрерывном блоке, то было бы странным создавать новый блок, копировать туда данные, и выдавать наружу его указатель.
Ведь с таким же успехом можно сразу выдать указатель на итак уже имеющийся блок.

Однако, поскольку стандарт не запрещает реализовывать внутренее хранилище по разному. То - не факт, что это будет именно так.

Другими словами, в отдельных случаях (реализациях стринга) это может работать. А в каких то может и не сработать. В этом и заключается смысл слова:
Цитата Сообщение от grizlik78 Посмотреть сообщение
Этого, кстати, тоже никто не обещает.
Может быть будет работать. Может быть не будет. Если нужно гарантированно портабельное решение, то лучше на такое не опираться.

Добавлено через 3 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну я вот так проверял. В любом случае и мой и Ваш варианты работают благодаря случаю. Как уже и сказали, строка действительна только до момента изменения самого объекта string.
Есть предположение, что:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
 
int main()
{
   std::string str = "12345";
   
   const char *cstr1 = str.c_str(),
              *cstr2 = 0;
   
   std::cout << str << '\n' << cstr1 << std::endl;
   
   str = "qwerty";
   
   cstr2 = str.c_str();
   
   std::cout << '\n' << str << '\n' << cstr1  //cstr1  выводит в режиме только для чтения мертвую память.
                << '\n' << cstr2 << std::endl;
   
   return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru