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

const char не инициализируется при объявлении - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть ли разница в данных объявлениях массива? http://www.cyberforum.ru/cpp-beginners/thread953828.html
string *array={"string1","string2"}; string array = {"string1","string2"}; В первом случае обьявляется указатель на массив, но ведь имя самого массива(второй вариант) по умолчанию уже является...
C++ не работает функция, не могу найти причину Всех с праздником! Задача: Необходимо написать программу состоящую из нескольких функция - принимающая данные в массив, выводящая на экран массив и функция реверса(поменять порядок элементов... http://www.cyberforum.ru/cpp-beginners/thread953815.html
C++ что это за ошибка
Вот http://snag.gy/Z3aDn.jpg
Динамический массив структур. Почему данные доступны после выполнения операции delete [] C++
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю выделенную область памяти оператором delete ... Чтобы убедиться, что память очистилась, после оператора...
C++ Ошибка при компиляции http://www.cyberforum.ru/cpp-beginners/thread953769.html
Пытаюсь перегрузить оператор индексации, но на этапе компиляции при обращении к экземпляру класса Elem выводит ошибку "warning: pointer to a function used in arithmetic". Конструктор по умолчанию...
C++ В чем ошибка? #include <iostream> using namespace std; int value;{ cout <<"Enter number:" <<endl; cin >> value; if(value>0) подробнее

Показать сообщение отдельно
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
13.09.2013, 22:11
Цитата Сообщение от racushka Посмотреть сообщение
std::string f = "бла-бла-бла";
...
const char* filename = f.c_str();
Так вообще никогда не нужно делать. c_str() возвращает указатель на данные используемые непосредственно строкой f, следовательно любое изменение содержимого этой строки может привести к тому, что указатель filename станет недействительным. Простой пример, который выглядит вполне корректным
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
#include <cassert>
 
int main()
{
    std::string s1 = "abc";
    std::string s2 = s1;
 
    const char* p = s2.c_str();
    assert(s2.c_str() == p);   // нормально
 
    s2[0] = '!';               // всего лишь меняем первый символ
    assert(s2.c_str() == p);   // ???
}
На первый взгляд всё нормально. Но, если класс std::string использует стратегию copy-on-write, p будет указывать уже совсем не туда, куда ожидалось. И это далеко не самый коварный пример. Если приходится использовать метод c_str(), то используйте его непорсдественно там, где это необходимо.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru