#include "stdafx.h" 1BEc"
fJk'5kv
#include <iostream> Sj/v:
#include <fstream> F9las#\J
#include <sstream> -U9C{q?h
#include <iterator> #k>A,
using namespace std; Bzt:9hr6BO
qJonzFp7
int main(int argc, char* argv[]) ZpBP#Y*
{ NN+;I^NqW&
ifstream ifs("test.txt"); }[@Q**j(
if(!ifs) Q]K$yo
return false; (=1zMZo
nsV=
ostringstream oss; c(5XT[Tw
istream_iterator<char> inpos(ifs); :.a184ax
istream_iterator<char> endpos; %WmTG }L)
ostream_iterator<char> out(oss); 'q}f3u >
std::copy(inpos, endpos, out); vE#8&Zq
string& szData = oss.str(); ?X\.O-=4X
BjTgZ98J
const char * cc = szData.c_str(); 8~RJnwF^
// cout << (long)szData << endl; H*f2fyC1\
// cout << (long)oss.str().c_str() << endl; t7V7 TL!5'
cout<< cc; (64es)B}"
{5%d#|?
return 0; a{JO8<dlm
} RDy&i
;9 ChBA
注意以上代码中红色部分没有写成: -^7
$HD
const char * cc = oss.str().c_str(); // error W*(- *\1[
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 mtE+}b@(!&
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。