錯誤代碼
string str;
cin >> str;
int int_size = sizeof(str); // ❌ 返回 string 對象大小(通常 32/24 字節),非字符內容長度
正確方法
int byteSize = str.length(); // 字符數(對應字節數,視編碼而定)
// 或
int byteSize = str.size(); // 同 length()
// 若需 UTF-8 字節數:
int utf8Bytes = Encoding.UTF8.GetBytes(str).Length; // C# 風格,C++ 需手動遍歷或用 ICU
核心區別
| 方法 | 含義 |
| sizeof(str) | 編譯期常量,std::string 類對象內存佔用(指針、大小、容量等元數據) |
| str.length()/size() | 運行期字符數(不含結尾 \0) |
完整示例
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "aaaaaaaaaaaaaaaaaa";
cout << str << " 所占字符數:" << str.length() << endl;
cout << "對象內存大小:" << sizeof(str) << " 字節" << endl;
return 0;
}