上代码!!!
#include#include #include 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。



