亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 9206 | 回復(fù): 25
打印 上一主題 下一主題

std::string你也許不知道的秘密 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-29 14:53 |只看該作者 |倒序瀏覽
  1. int main(int argc, char** argv) {
  2.     char buffer[32] = {0};
  3.     buffer[0] = 0;
  4.     buffer[1] = 'E';
  5.     buffer[2] = 'L';
  6.     buffer[3] = 'L';
  7.     buffer[4] = 'O';
  8.     string s(buffer, 32);

  9.     string b = "hello";
  10.     b = s + b;
  11.     cout << "b:"<<b << endl;
  12.     cout <<"s.size():"<< s.size() << endl;
  13.     cout <<"s:"<< s << endl;
  14.     cout << "s.c_str()"<<s.c_str() << endl;

  15.     return 0;
  16. }
復(fù)制代碼
結(jié)果很奇怪
b:ELLOhello
s.size():37
s:ELLO
s.c_str():

結(jié)果是s.c_str()與s打印出來完全不同

我是在寫文件的時候 用fwrite 了一個string 發(fā)現(xiàn)寫出來的東西很奇怪,才發(fā)現(xiàn)string和c_str的不同,蛋都疼了


論壇徽章:
0
2 [報告]
發(fā)表于 2011-12-29 14:59 |只看該作者
很正常啊, c str和 c++ str,本來就不同。

論壇徽章:
0
3 [報告]
發(fā)表于 2011-12-29 14:59 |只看該作者
回復(fù) 2# AD8018


    {:3_201:}
那我怎么安全的使用c_str()調(diào)用C庫函數(shù)啊

論壇徽章:
0
4 [報告]
發(fā)表于 2011-12-29 15:06 |只看該作者
hy036630 發(fā)表于 2011-12-29 14:59
回復(fù) 2# AD8018


保證字符串中不出現(xiàn)0即可。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
5 [報告]
發(fā)表于 2011-12-29 15:17 |只看該作者
hy036630 發(fā)表于 2011-12-29 14:59
回復(fù) 2# AD8018


是不知道, 居然 cout << s 還能打印出 0 后面的字符, 還能把 第一個0 給忽略, 簡直強大的讓人莫名其妙。
std::string.data() 與 std::string.size() 相互配合, 以使用 void* 語意。
自從知道了 c_str() 實際內(nèi)部使用 malloc 以保證 c_str 返回的緩沖以 0 結(jié)尾后, 我就再也不使用它了

論壇徽章:
0
6 [報告]
發(fā)表于 2011-12-29 15:21 |只看該作者
本帖最后由 AD8018 于 2011-12-29 15:21 編輯
zylthinking 發(fā)表于 2011-12-29 15:17
自從知道了 c_str() 實際內(nèi)部使用 malloc 以保證 c_str 返回的緩沖以 0 結(jié)尾后, 我就再也不使用它了


這個我到現(xiàn)在還不知道。難以置信。

論壇徽章:
0
7 [報告]
發(fā)表于 2011-12-29 17:36 |只看該作者
回復(fù) 6# AD8018


   哇  string還隱藏了這么多啊  蛋疼 用得我好怕

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
8 [報告]
發(fā)表于 2011-12-29 18:08 |只看該作者
lz也就算了…… ls另兩位是來賣萌的對嗎  越說越玄乎了…… C++就那么可怕么……
其實string,cout沒有什么秘密,真正的秘密是終端對非打印字符的顯示方式

重定項到文件然后查看文件內(nèi)容: ./executable > output.txt
或者如果LESSCHARSET設(shè)置正確的話: ./executable | less
就可以看見內(nèi)容了

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
9 [報告]
發(fā)表于 2011-12-29 18:11 |只看該作者
OwnWaterloo 發(fā)表于 2011-12-29 18:08
lz也就算了…… ls另兩位是來賣萌的對嗎  越說越玄乎了…… C++就那么可怕么……
其實string,cout沒有什 ...


我是真不知道ostream 針對 string的行為, 順便將c_str() 這個陷阱抖一抖, 因為我確信肯定有人不知道

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
10 [報告]
發(fā)表于 2011-12-29 18:15 |只看該作者
實際輸出內(nèi)容如下:

  1. b:^@ELLO^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@hello
  2. s.size():32
  3. s:^@ELLO^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
  4. s.c_str()
復(fù)制代碼
^@是'\0' 。 lz的終端可能沒法顯示出這個字符而已。

我還奇怪的是……  lz你在1樓帖出的輸出是你自己手敲的?
要是你偷點懶, 想到重定項到文件后再復(fù)制粘貼, 問題應(yīng)該就解決了……
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP