#include "stdafx.h" $nkvp`A
`l#|][B)g$
#include <iostream> Aof)WKo
#include <fstream> 9<e%('@[
#include <sstream> ?S*Cvr+=4
#include <iterator> bvay7
using namespace std; Nld y76|g
D(E3{\*R
int main(int argc, char* argv[]) H^VNw1.
{ '-,$@l#
ifstream ifs("test.txt"); Io(*_3V)B
if(!ifs)
6#J>b[Q
return false; 6-fdfU
*?JNh;
ostringstream oss; 9}[UZN6
istream_iterator<char> inpos(ifs); 7J[DD5
istream_iterator<char> endpos; J1s~w`,
ostream_iterator<char> out(oss); wV604eO(
std::copy(inpos, endpos, out); B~CdY}UTsj
string& szData = oss.str(); Kl Kk?6>
]ZMFK>"^%
const char * cc = szData.c_str(); Nf]h8d~
// cout << (long)szData << endl; =O1py_m
// cout << (long)oss.str().c_str() << endl; V
6*ohC:
cout<< cc; bQvhBa?
n@JZ 2K4
return 0; r6b;v2!8
} M+L8~BD@
? PI2X.6
注意以上代码中红色部分没有写成: .c5)`
const char * cc = oss.str().c_str(); // error 8v ZY+Q >
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 8ofKj:W]
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。