2015-05-29 42 views
2
#include <iostream> 
#include <stdio.h> 
#include <string.h> 
using namespace std; 
int main() 
{ 
    char a[]="one string",b[]="twostrings"; 
    strcpy (a,b); 

    cout<<"A="<<a; 
    cout<<endl<<"B="<<b<<endl; 
} 

a和b是顯示他們之後平等的,但如果我把一個空間,這樣b[]="two strings",然後COUT B,它顯示了B中的空白,爲什麼呢?的strcpy源未顯示

回答

7

由於使用空間,a[]緩衝區不夠大,無法保存b的副本,並且您試圖使其發生這種情況會導致堆棧產生未定義的行爲。任何事情都可能發生,但很可能在你的情況下,它覆蓋下一個變量的第一個字節(即b),終止NUL,使得b顯示爲空。

拼寫出來:

a   b 
one string0two strings0 // original content 0=NUL 
two strings0wo strings0 // after copy 

強制性提示:使用std::string只要你能。