C++ strcpy与strncpy的注意事项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Akeron/article/details/78608912

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

猜你喜欢

转载自blog.csdn.net/Akeron/article/details/78608912