• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            力為的技術博客

            聯系 聚合 管理
              154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

            ?取得std::ostringstream里的內容可以通過str()和str(string&)成員函數。由于str()返回的是臨時對象,因而會有如下誤用:

            const ? char * ?pBuffer? = ?oss.str().c_str();

            pBuffer指向的內存已被析夠!

            測試代碼:

            ????????ostringstream?oss;
            ????????oss?
            << ? " something?you?like " ? << ?endl;

            // ?can't?work!
            ???????? const ? char * ?szData1? = ?oss.str().c_str();
            ????????
            // work!
            ???????? string & ?ss? = ?oss.str();
            ????????
            const ? char * ?szData2? = ?ss.c_str();


            例子:
            用std::ostringstream獲取整個文件的內容:

            ????????ifstream?ifs( " in.txt " );

            ????????istream_iterator
            < char > ?inpos(ifs);
            ????????istream_iterator
            < char > ?endpos;
            ????????ostream_iterator
            < char > ? out (oss);
            ????????std::copy(inpos,?endpos,?
            out );

            // 有些情況下需要取得buffer:
            ???????? string & ?ss? = ?oss.str();
            ????????
            const ? char * ?szData? = ?ss.c_str();


            ?

            posted on 2006-06-08 16:49 力為 閱讀(6476) 評論(5)  編輯 收藏 引用 所屬分類: 4. C++ FAQ

            評論

            # re: std::ostringstream::str()返回臨時對象 2006-06-08 17:26 LOGOS
            const char * szData1 = oss.str().c_str();
            szData1[0] == '\0';
            不過既然是臨時變量,你這么用
            string & ss = oss.str();
            const char * szData2 = ss.c_str();
            不符合規范吧  回復  更多評論
              

            # re: std::ostringstream::str()返回臨時對象 2006-06-08 17:30 wzq
            To LOGOS:
            but it really works!  回復  更多評論
              

            # re: std::ostringstream::str()返回臨時對象 2006-06-08 17:48 力為
            to LOGOS:
            這種情況下編譯器一般會做擴展:
            為臨時變量設置引用,那么臨時變量的生命周期將和引用的生命周期一致  回復  更多評論
              

            # re: std::ostringstream::str()返回臨時對象 2006-06-12 21:41 ooo
            // 有些情況下需要取得buffer:
            string & ss = oss.str();
            const char * szData = ss.c_str();

            這是是不是該該成:
            const string & ss = oss.str();
            const char * szData = ss.c_str();

            為臨時變量設置引用,那么臨時變量的生命周期將和引用的生命周期一致 ,
            就應該加上 const, 可是在VC6.0上對這個語句string & ss = oss.str();且沒有錯誤的提示.
              回復  更多評論
              

            # re: std::ostringstream::str()返回臨時對象 2006-12-13 10:26 jlupaopao
            @ooo
            g++下確實會有錯誤報告
            error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >'

            加上const就好了,其實加上const等同于
            string temp =oss.str();
            const string & ss = temp
            const char * szData = ss.c_str();
            既然如此為什么不直接寫string ss =oss.str(); 呢
              回復  更多評論
              

            精品一区二区久久久久久久网站| av无码久久久久不卡免费网站| 欧美777精品久久久久网| 国内精品久久国产大陆| 91久久精一区二区三区大全| 久久99久久99小草精品免视看 | 久久精品无码一区二区app| 91精品观看91久久久久久| 日韩一区二区三区视频久久 | 久久精品国产亚洲一区二区三区| 亚洲欧美精品一区久久中文字幕| 久久人人爽人人人人片av| 久久久久亚洲AV无码网站| 亚洲国产日韩欧美久久| 久久精品午夜一区二区福利| 国产精品日韩欧美久久综合| 狠狠色丁香久久婷婷综合| 久久精品无码一区二区三区免费 | 国产精品美女久久久免费| 亚洲va久久久噜噜噜久久狠狠| 国产一区二区精品久久凹凸| 五月丁香综合激情六月久久| 国产69精品久久久久99尤物| 热re99久久精品国99热| 狠狠色丁香久久婷婷综合图片| 国产精品毛片久久久久久久 | 一个色综合久久| 国产一区二区精品久久凹凸| 久久精品国产99国产电影网| 伊人久久综合精品无码AV专区| 欧美久久一区二区三区| 99久久亚洲综合精品成人| 国内精品久久久久久99蜜桃| 中文精品久久久久人妻不卡| 97精品依人久久久大香线蕉97| 欧美日韩成人精品久久久免费看 | 久久久久噜噜噜亚洲熟女综合| 久久香蕉一级毛片| 伊人久久综合热线大杳蕉下载| www久久久天天com| 免费国产99久久久香蕉|