#1
|
||||
|
||||
C++ 請教
下面這程式,請問紅字的部份?謝謝。
#include <iostream> using namespace std; class strtype { char *p; int len; public: strtype(char* ptr); ~strtype(); void show(); }; strtype::strtype(char *ptr){ len=strlen(ptr); p=(char*)malloc(sizeof(len+1));//為何這裡要加一?不用加一也可以啊? if(!p) { cout<<"Allocation error.\n"; exit(1); } strcpy(p,ptr); } strtype::~strtype(){ free(p); } void strtype::show(){ cout<< "The length of "<< p <<" is "<<len<<endl; } int main(){ strtype s1("Hello world!"),s2("This is a book."); s1.show(); s2.show(); return 0; } |
#2
|
|||
|
|||
用strlen的時候要多一個來記錄\0,因為strlen遇到\0就停止,但實際上要存
字串的時候最後的terminator是要存的 #len=strlen(ptr); 這裡會這樣寫的原因是 sizeof(char) 嚴格定義為1,所以寫成 sizeof(len+1) |
#3
|
||||
|
||||
引用:
只是我如果沒有+1似乎執行結果也沒有差別? 而且如果我用p=(char!)malloc(sizeof(ptr))而非sizeof(len)的話,不知道有沒有把最後一個'\0'的空間也包進來? |
#4
|
|||
|
|||
沒加1會導致後方連續記憶體被覆蓋,這會造成一些問題。
不會,因為你真對ptr去取,他是回傳pointer大小,不論型態4byte |