char ch[3];
strcpy(ch,"Hello");
cout<<ch<<" "<<sizeof(ch);
Q1。爲什麼當ch的大小是3時打印「Hello」? Q2302。如果ch從ch [2]轉換爲ch [6](通過隱式類型轉換),爲什麼sizeof(ch)仍然是3?C++字符串到字符串轉換
char ch[3];
strcpy(ch,"Hello");
cout<<ch<<" "<<sizeof(ch);
Q1。爲什麼當ch的大小是3時打印「Hello」? Q2302。如果ch從ch [2]轉換爲ch [6](通過隱式類型轉換),爲什麼sizeof(ch)仍然是3?C++字符串到字符串轉換
strcpy沒有進行大小檢查,所以它只是在內存地址寫入「Hello \ 0」,覆蓋內存中的任何位置。
沒有執行轉換,ch是char [3],因爲它在strcpy之前。
我假設當你輸入char a[3];
你的意思是char ch[3];
。
A1:當你聲明一個大小的數組時,它可以達到你的不超過它。如果在這種情況下確實超過了它,則會得到未定義的結果。
A2:你不能像這樣轉換它,所以這是一個非問題。
你正在做一些非常危險的事情。這是使用std::string
的原因之一,您無需檢查是否超出簡單複印範圍。
問題1:
與其他人一樣已經說過,它打印出「你好」是不確定的行爲,任何事情都有可能發生。但那不是全部。在你的代碼中寫出像你一樣的界限是很危險的。你基本上得到了一個Buffer Overflow,如果你看看維基百科的例子,你會發現它幾乎是你得到的相同的代碼。
問題2:
沒有轉換。當您撥打strcpy(ch, "Hello");
您的陣列ch
decays into a pointer。 strcpy
沒有辦法知道它可以在那裏安全地複製多少個字符,因爲指針不過是內存地址。它不知道在該位置有多少內存可用,因此即使(如你的情況)那樣,所有內容都會寫出所有內容。
像你在你的代碼中得到的東西是指針被稱爲不安全的原因之一。
什麼是ch?我只看到'char a [3]' – taocp
A1:未定義行爲; A2:它的類型根本沒有被轉換。 – 0x499602D2
看起來代碼中存在一些錯誤,您使用char a [3],然後將其複製到「ch」而不是「a」。 – RacerNerd