Доброго времени суток,
Обьясните мне пожалуйста про работу с памятью, а то пора бы знать уже а я все никак
если мы делаем
char * pc;
pc="test";
Я так понимаю компилятор выделяет память для "test" и pс сылается на это адрес. Все ок, и разницы обьявлен pc как const char * или char*, нету.
А что происходит когда делаем :
const char * pc;
string str;
pc=str.c_str()
pc валиден только пока str не вышла из области видимости или нет? и если мы str="d"; сделаем то все, pc уже "не тот"?
Правильно ли я все понимаю, а то что-то засомневался
И еще в STL Format для стринг как я понял нету, я делаю так
stringstream str;
str<<"Cell["<< col <<","<< row <<"]";
PrintDebug(Screen, str.str(), 5, 25);
str.str("");
str<<"State = "<< field[col][row].state <<" , value = "<< field[col][row].value;
PrintDebug(Screen, str.str(), 5, 40);
str.str("");
...
Это более менее нормально или есть более правильный путь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, TNikolay, Вы писали:
TN>Доброго времени суток,
И вам
TN> И еще в STL Format для стринг как я понял нету, я делаю так
TN>TN> stringstream str;
TN> str<<"Cell["<< col <<","<< row <<"]";
TN> PrintDebug(Screen, str.str(), 5, 25);
TN> str.str("");
TN> str<<"State = "<< field[col][row].state <<" , value = "<< field[col][row].value;
TN> PrintDebug(Screen, str.str(), 5, 40);
TN> str.str("");
TN> ...
TN>
TN>Это более менее нормально или есть более правильный путь?
http://www.boost.org/libs/format/doc/format.html
Здравствуйте, TNikolay, Вы писали:
TN>Доброго времени суток,
TN> Обьясните мне пожалуйста про работу с памятью, а то пора бы знать уже а я все никак
TN> если мы делаем
TN>TN> char * pc;
TN> pc="test";
TN>
TN> Я так понимаю компилятор выделяет память для "test" и pс сылается на это адрес. Все ок, и разницы обьявлен pc как const char * или char*, нету.
В данном случае выделение памяти не происходит, т.к. "test" — строковый литерал, который уже хранится в программе, а pc просто на него указывает.
Вариант
char * pc = "test";
хоть и работает (для совместимости с С, кажется), но неверен по смыслу.
Ибо
char * pc = "test";
pc[0] = 'T'; // UB