補充一個基礎問題
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好
因爲後者如果==寫成=號時,不會報錯,而前者會,恰好這個失誤是比較從常見的失誤。**