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好
因为后者如果==写成=号时,不会报错,而前者会,恰好这个失误是比较从常见的失误。**

猜你喜欢

转载自blog.csdn.net/kellen_f/article/details/79145561