2013-11-03 74 views
0

我想在我的程序中獲得一個字符串的大小,所以然後我可以稍後使用循環將其轉換爲字符,但程序返回的大小是5數字小於實際大小。爲什麼會發生這種情況?C++ sizeof()不返回正確的大小

std::string theFileName = fileNames[ curTab ]; 
int size = sizeof(theFileName); 

調試時我的程序,它存儲這theFileName:

theFileName = 「C:\用戶\文森特\桌面\ Untitled.txt」

而這個尺寸:

size = 32

如果您計算文件名中的字符,實際上是37.這是什麼原因造成的?我正在使用MS Visual C++ 2010 Express,創建一個記事本程序。

+6

使用'size'函數。查看'sizeof'的功能。 – chris

+1

@Vince:是什麼讓你覺得你可以用'sizeof'來達到這個目的呢?你讀過'sizeof'的規格嗎?或者你是否確定'sizeof'有點「聽起來不錯」? – AnT

+0

我不知道爲什麼我想到這一點。我想我沒有查找它的規範,我應該這樣做,現在我看起來像一個白癡:P – Vince

回答

0

std :: string對象的大小與其包含的字符串的大小無關。使用爲此提供的std :: string成員函數。

1

std::string不是一個字符數組。是由std::string對象管理的動態數組。 sizeof返回指定數據類型的大小,在字符串的情況下,指向數組的指針加上一定數量的靜態分配的字符(這是一種常見的字符串優化)。

你應該使用的是內置函數size(),它返回字符串的長度。

1

含量的大小與

theFileName.size() 

sizeof返回對象std::string的大小來確定。例如,該對象可以包含一個指向內容位置的指針和一個表示長度的無符號整數。因此,sizeof將包含一個指針的大小和無符號整數。如果您更改內容,這不會有所不同。

2

sizeof告訴你數據結構及其所有成員數據的大小。然而,一個字符串對象通常會將字符串數據存儲在堆上 - 即它不是成員數據,但對象擁有它並存儲指向它的指針。

獲取字符串對象大小的正確方法是調用size()length()成員函數。

0

sizeof用於計算以字節爲單位測量的任何數據類型的大小。

您的程序中必須使用的功能是size

相關問題