2010-09-19 61 views
0
class student 
{ 
char *name; 
int I; 
public: 
student() 
{ 
    I=0; 
    name=new char[I+1]; 
} 
student(char *s) 
{ 
    I=strlen(s); 
    name=new char[I+1]; 
    strcpy(name,s); 
} 
void display() 
{ 
    cout<<name<<endl; 
} 
void manipulate(student &a,student &b) 
{ 
    I=a.I+b.I; 
    delete name; 
    name=new char[I+1]; 
    strcpy(name,a.name); 
    strcpy(name,b.name); 
    } 
}; 
void main() 
{ 
    clrscr(); 
    char *temp="Jack"; 
    student name1(temp),name2("Jill"),name3("John"),S1,S2; 
    S1.manipulate(name1,name2); 
    S2.manipulate(S1,name3); 
    S1.display(); 
    S2.display(); 
    getch(); 
} 

我計算了這個代碼的輸出很多次,但不明白它。 此代碼的輸出爲: Jill endline約翰指針相關的輸出

+0

你期望輸出是什麼? – 2010-09-19 15:32:26

+0

你的問題是什麼? – abelenky 2010-09-19 15:34:41

+0

輸出必須是Jill一個換行符,然後我檢查了編譯器的插口 – user451990 2010-09-19 15:38:01

回答

0

可能您希望在操作函數中使用strcat代替第二個strcpy。

0

你的問題是在這裏:

strcpy(name,a.name); strcpy(name,b.name);

將Jack + null複製到名稱的前五個字節中,然後第二個strcpy將Jill複製到這些相同的字節上。然後在第二種情況下,約翰被複制到最初的字節上。

你可能想使用strcat?