Я не мог понять, как могут быть указатели одинаковыми, когда размер текста равен. Кажется, что firstStringObj :: c_str() перезаписывает предыдущий указатель.std :: string :: c_str() перезаписывает предыдущую, возвращаемую функцией
#include <iostream>
#include <string>
#include <string>
#include <stdio.h>
std::string getConstCharAndModifyItWithANewString(const char* constchar)
{
std::string stringAtStack(constchar);
stringAtStack += "::isModified";
return stringAtStack;
}
int main()
{
const char* firstConstCharPointer = getConstCharAndModifyItWithANewString("Hi!").c_str();
std::string firstStringObj = "Hi+";
printf(" firstConstCharPointer(%s)(%p)\nfirstStringObj(%s)(%p)\n\n", firstConstCharPointer,firstConstCharPointer, firstStringObj.c_str(), firstStringObj.c_str() );
}
ВЫВОД: firstConstCharPointer (Привет +) (0x4593eb8) firstStringObj (Привет +) (0x4593eb8)
Похоже, проблема оптимизации компилятора. Не происходит на gcc 4.9.2 – ilo
Вы наблюдаете неопределенное поведение, поэтому не можете винить оптимизацию. Также: прочитайте документы '.c_str()' – milleniumbug
Не происходит в строках большого размера. – ilo