void strncpy(String &to, const String &from, int n)
/* Post: The function concatenates String add_on onto the end of String add_to .
*/
{
const char *cfrom = from.c_str( );
char *copy = new char[n];
to=strncpy(copy, cfrom, n);
delete [] copy;
}
uj5u.com熱心網友回復:
當strncpy執行結束時,cfrom的內容已經拷貝到copy變數了。strncpy回傳copy的值,賦值給to。
uj5u.com熱心網友回復:
char *strncpy(char *dest, char *src, int n)to=strncpy(copy, cfrom, n); // to指標變數指向copy陣列
delete [] copy; //delete以后to不安全了
不過這里to是String型別,to=strncpy(copy, cfrom, n); 會不會構造一個String物件?覺得不如寫的明確一點。
uj5u.com熱心網友回復:
char *copy = new char[n];似乎應該n+1
uj5u.com熱心網友回復:
復制完畢后,為保險起見,最好將dest串最后一字符置NULLuj5u.com熱心網友回復:
這是一個自己定義的String類中的一個strncpy函式,函式的作用原理是通過呼叫C中的strncpy函式實作。代碼注釋如下:
void strncpy(String &to, const String &from, int n)
{
const char *cfrom = from.c_str( ); //將待復制String轉換為c_str
char *copy = new char[n]; //新建一塊大小為n的字串陣列
to=strncpy(copy, cfrom, n); //呼叫strncpy函式復制cfrom到copy字串陣列中,同時將生成的字串陣列
//賦值給String物件to,這里發生了一個型別轉換,所以
//這里的等號在類中需要多載,不然實作不了
delete [] copy; //良好的編程習慣,函式中申請的空間由函式進行維護,退出時應delete
}
ps:這不是考試的最后一題嘛╭∩╮(︶︿︶)╭∩╮
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77339.html
上一篇:基于對話框的ocx上的按鈕觸發ctrl類的事件,容器沒反應
下一篇:矩形排版演算法
