C++ strcpy與strncpy的注意事項

1. strcpy()

   strcpy的函數式爲:strcpy(dst,src),因爲char數組最後以’\0’爲結尾,所以需要注意的是如果strlen(src)>strlen(dst)時,則最後的’\0’無法複製,則會導致出錯,即dst的大小至少要等於src的大小,保證strcpy能複製最後的’\0’。

2. strncpy()

   strncpy的函數式爲:strcpy(dst,src,n),即將src的前n個字符複製給dst,如果dst本來就有內容,並且本次拷貝的字符中不包含’\0’,則內容會連在一起,舉個栗子:

    char dst[]="Hello world";
    strncpy(dst,"AB",2);

輸出的結果是ABllo world,對於strncpy要注意的是當n< strlen(src)時,同樣會不能複製’\0’,如果n>strlen(src),則可以正確複製。同樣這裏也要這dst的大小於n的大小的關係。建議在初始化字符串數組時使用char str[]={0}。

總的來說,strcpy用來複制字符串,如果dst長度足夠,其會拷貝最後的結尾符’\0’,而strncpy是用來拷貝字符的,只拷貝固定的字符個數,如果包含了’\0’則拷貝並在此結束,且需要dst大小足夠用來存儲,如果不包含’\0’,則不拷貝。

C++中Map如何通過key得到value:

 iter = map.find(key);
 if(iter!=map.end())
 {
     return iter->second;
 }
 return null;

字符數組轉化成string類型:

char str[] = "test";
string s(ch);
string s = str;//string s; s=str;也可用於加法

將string類型轉換爲字符數組:

char buffer[5];
string s("test");
len = s.copy(buffer, 4);
buffer[len] = '\0';

或者

char buffer[5];
string s("test");
strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 5);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章