std :: string如何在编译器中工作?

时间:2015-12-24 13:44:10

标签: c++ c++11

当我读一个程序时引用这个问题(引用:c ++ primer plus)4.22并对其进行一些修改

#include <iostream>
#include <cstring>

using namespace std;

char * getName();

int main(int argc, const char * argv[]) {
// insert code here...

char *name;

name = getName();
string sb = name;
cout << name << " at " << (int *)name << "\n";
cout << *name << "   " << sb << endl;
cout << &sb << endl;
delete [] name;

name = getName();
sb = name;
cout << name << " at " << (int *) name << "\n";
cout << *name << "   " << sb << endl;
cout << &sb << endl;
delete [] name;

cout << sb << endl;
cout << &sb << endl;

return 0;
}

char *getName()
{
char temp[80];
cout << "Enter last name: ";
cin >> temp;
char *pn = new char[strlen(temp) + 1];
strcpy(pn, temp);
return pn;
}

并且没有内存泄漏。 我检查某人的地址与姓名不同。 我想它可能会像这样工作 的std :: string

第一步:malloc(char *,sizeof(char *)* sizeof(name)) 然后:snprintf(string,sizeof(string),&#34;%s&#34;,name) final:字符串获取新地址

如果我使用声明: string = string +&#34;我是指针&#34 ;; 它仍然有效。 我猜它真的是一个指针! 只是重新分配它

特此,我认为字符串是char *或char数组,我尝试* string然后编译器告诉我它有问题!我不能这样使用,所以我希望有人可以解释编译器中的字符串类型以及它是如何工作的!为什么字符串不是指针?或者它实际上是一个指针,但它有特殊的方法可以使用? 提示:所有在mac os上工作

1 个答案:

答案 0 :(得分:2)

  

我希望有人可以解释什么类型的字符串

这是一堂课。

  

为什么字符串不是指针?或者它实际上是一个指针,但它有特殊的使用方法吗?

这不是指针。指针无法存储必要的数据以满足标准定义的要求。

  

我认为字符串是char *或char数组

不是。但是,它很可能确实有一个指向数组的char指针作为数据成员。