C++字符串問題

補充一個基礎問題

char acX[]="abc";
char acY[]={'a','b','c'};
char *szX="abc";
char *szY="abc";

這四個字符串有區別
acx,acy內存分配在堆上,是兩個不同的字符串,前者最後一位是’\0’,後者最後沒有’\0’
szx,szy都是指針,指向同一塊內存,這塊內存就是文字常量“abc”(這個最後也有’0’,該內存分配在靜態存儲區,不可被修改,默認只有可讀屬性

strcpy(char ,const char)函數

char *strcpy(char *str, char *s)
{
    if (str == NULL || s == NULL)
        return NULL;
    char *strcopy = str;
    while ((*strcopy++ = *s++) != '\0');
    return strcopy;
}

大的字符串不可以拷貝到小的字符串,小的字符串拷貝到大的字符串以後大小不變。
memcpy函數

void* memcpy(void* m, void* t, size_t size)
{
    assert((m != NULL && t != NULL));
    char* sm = (char*)m;
    char* st = (char*)t;
    while (size--)
        *sm++ = *st++;

    return sm;
}

區別:
1.strcpy不能限定拷貝的長度,而memcpy可以
2.strcpy只能拷貝字符串,而memcpy不僅僅可以拷貝字符串

**學到的一個小tip,常量和變量比較時候常量寫在前面。
比如 NULL==x比x==NULL好
因爲後者如果==寫成=號時,不會報錯,而前者會,恰好這個失誤是比較從常見的失誤。**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章