簡體   English   中英

C ++字符串到字符串的轉換

[英]C++ String to String Conversion

char ch[3];
strcpy(ch,"Hello");
cout<<ch<<" "<<sizeof(ch);

Q1。 當ch的大小為3時,為什么打印“ Hello”?

Q2。 如果將ch從ch [2]轉換為ch [6](通過隱式類型轉換),那么為什么sizeof(ch)仍為3?

strcpy不會進行大小檢查,因此僅在a的內存地址寫入“ Hello \\ 0”,覆蓋位於內存之后的任何內容。

沒有執行任何轉換,ch是char [3],與strcpy之前一樣。

我假設您鍵入char a[3]; 你的意思是char ch[3];

A1:當您聲明某個大小的數組時,由您自己決定不要超過它。 如果您確實超出了這種情況,則會得到不確定的結果。

A2:您不能像這樣轉換它,所以這不是問題。

您在那做的事確實很危險。 這是使用std::string的原因之一,您不必檢查是否超出限制即可進行簡單復制。

問題1:
就像其他人已經說過的那樣,打印出“ Hello”是未定義的行為,任何事情都可能發生。 但這還不是全部。 像在代碼中那樣超出范圍是危險的。 基本上,您有一個Buffer Overflow ,如果您查看Wikipedia上的示例,您會發現它幾乎與您得到的代碼相同。

問題2:
沒有轉換。 當您調用strcpy(ch, "Hello"); 您的數組ch 衰減為指針 strcpy無法知道可以在其中安全地復制多少個字符,因為指針不過是一個內存地址。 它不知道該位置有多少可用內存,因此即使您(例如您)超出范圍,也只需寫所有內容。

像代碼中那樣的事情是指針被稱為不安全的原因之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM