上代码!!!
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
char *p[] = {"Hello", "World", "!"};
char *q[] = {strdup(p[0]), strdup(p[1]), strdup(p[2])};
char *r[] = {p[0], p[1], p[2]};
for(int i = 0l i <= 2; ++i)
// Hello World !
cout << p[i] << " ";
cout << endl;
for(int i = 0l i <= 2; ++i)
// Hello World !
cout << q[i] << " ";
cout << endl;
for(int i = 0l i <= 2; ++i)
// Hello World !
cout << r[i] << " ";
cout << endl;
cout << equal(begin(p), end(p), q) << endl; // 0
cout << equal(begin(p), end(p), r) << endl; // 1
free(q[0]);
free(q[1]);
free(q[2]);
}
strdup函数将字符串拷贝到新建的位置处。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。
为什么p, q, r三者的内容都是一样的,和p进行比较的时候q和p不相同,r却和p相同呢?
我们知道,C风格的字符串本质其实是char* 类型,而equal使用==运算符来比较两个序列中的元素。因此equal比较的实际上是元素的地址,q中的字符串是新开辟的空间,因此其地址肯定和p中字符串的空间不同,输出0。r中的字符串实际上就是p中字符串的地址,因此他们相同,输出1。