亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不管輸入什么輸出的都是16,問題出在哪里呢?

為什么不管輸入什么輸出的都是16,問題出在哪里呢?

C++
qq_遁去的一_1 2023-04-22 18:14:57
#include<iostream>#include<string>using namespace std;int main(){int n;string i;cin>>i;n=sizeof(i);cout<<n;return 0;}還有到底sizeof()函數要怎么用來求字符串的長度?請各位高手幫我解決一下,我是新手所以講得具體點
查看完整描述

2 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

sizeof不是拿來求字符串長度的 它是用來求大小的。

求string長度用 i.length();這個方法!這就是i的長度!

查看完整回答
反對 回復 2023-04-25
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

string 是一個類 不是數據類型  
string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string里放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態分配的,與sizeof()無關。
有sizeof()為12、32字節的庫實現。 但是VC6.0測試后sizeof(string)=16.還是跟編譯器有關。

首先看一下sizeof在msdn上的定義:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
看到return這個字眼,是不是想到了函數?錯了,sizeof不是一個函數,你見過給一個函數傳參數,而不加括號的嗎?sizeof可以,所以sizeof不是函數。網上有人說sizeof是一元操作符,但是我并不這么認為,因為sizeof更像一個特殊的宏,它是在編譯階段求值的。舉個例子:

cout<<sizeof(int)<<endl; // 32位機上int長度為4
cout<<sizeof(1==2)<<endl; // == 操作符返回bool類型,相當于 cout<<sizeof(bool)<<endl;
在編譯階段已經被翻譯為:
cout<<4<<endl;
cout<<1<<endl;
這里有個陷阱,看下面的程序:
int a = 0;
cout<<sizeof(a=3)<<endl;
cout<<a<<endl;
輸出為什么是4,0而不是期望中的4,3???就在于sizeof在編譯階段處理的特性。由于sizeof不能被編譯成機器碼,所以sizeof作用范圍內,也就是()里面的內容也不能被編譯,而是被替換成類型。=操作符返回左操作數的類型,所以a=3相當于int,而代碼也被替換為:
int a = 0;
cout<<4<<endl;
cout<<a<<endl;
所以,sizeof是不可能支持鏈式表達式的,這也是和一元操作符不一樣的地方。
結論:不要把sizeof當成函數,也不要看作一元操作符,把他當成一個特殊的編譯預處理。


查看完整回答
反對 回復 2023-04-25
  • 2 回答
  • 0 關注
  • 185 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號