C++ strcpy与strncpy的注意事项

来源:互联网 发布:怎么使用淘宝直通车 编辑:程序博客网 时间:2024/06/05 06:21

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);