c++ strcpy相关坑点

strcpy用法

strcpy的作用是将一个字符串的内容复制到另外一个字符串中,覆盖原有的内容。

char* strcpy(char* destination,const char* source);

常见的例程有:

将字符数组里的内容复制到字符数组里。

int main(int argc, const char * argv[]) {
    // insert code here...
    char a[128] = "1234";
    char b[128] = "abcd";
    strcpy(a, b);
    printf("%s\n",a);
    return 0;
}

将字符串常量里的内容复制到字符数组里。

int main(int argc, const char * argv[]) {
    // insert code here...
    char a[128] = "1234";
    char *b = "abcd";
    strcpy(a, b);
    printf("%s\n",a);
    return 0;
}

需要注意的是,在c++中char *p这样的变量是存放在常量区的,实际上在c++11之后以上的代码应该这样写才不会有warning:

int main(int argc, const char * argv[]) {
    // insert code here...
    char a[128] = "1234";
    const char *b = "abcd";
    strcpy(a, b);
    printf("%s\n",a);
    return 0;
}

相关坑点

strcpy并不是非常的神奇,并不是一个能随便用的函数。

目标字符串空间要足够

int main(int argc, const char * argv[]) {
    // insert code here...
    char a[2] = "";
    char b[128] = "abcdefghi";
    strcpy(a, b);
    printf("%s\n",a);
    return 0;
}

以上代码中目标字符串只有2个char类型空间,直接复制过去会导致数据溢出。

目标字符串空间要可变

int main(int argc, const char * argv[]) {
    // insert code here...
    char *a = "";
    char b[128] = "abcdefghi";
    strcpy(a, b);
    printf("%s\n",a);
    return 0;
}

以上代码试图将字符串拷贝到char *a这种变量中,但是前面我们已经提到,char *a其实是const char *a类型,属于常量,常量是不可以被二次赋值的。

猜你喜欢

转载自blog.csdn.net/m0_37872216/article/details/126992305