[英]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.