#include <iostream>int main(){ using namespace std; char a[3]; strcpy(a,"affd sfasdfsdf"); cout << a[5] << endl; cout << a << endl;
}這里的輸出結果居然是:saffd sfasdfsdf奇怪,a的長度明明是3,為什么會有這樣的輸出結果呢?
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
關于char *strcpy( char *dest, const char *src );
,去看一下cppreference里的描述:
Copies the null-terminated byte string pointed to by src, including
the null terminator, to the character array whose first element is
pointed to by dest. The behavior is undefined if the dest array is
not large enough. The behavior is undefined if the strings overlap.
The behavior is undefined if either dest is not a pointer to a
character array or src is not a pointer to a null-terminated byte
string.
重點是The behavior is undefined if the dest array is not large enough,意思說如果你的a
沒有足夠的空間放下你的字符串字面量,編譯器可以隨心所欲的給出任何結果,也不需要給出任何的報錯(當然編譯器也可以給出貌似正確的結果就像你給出的stdout
那樣)。
另外,個人的觀點是能用std::string
的時候(不需要考慮兼容),就盡量不要用char *
,費心費力還容易寫錯。
- 1 回答
- 0 關注
- 672 瀏覽
添加回答
舉報
0/150
提交
取消