char *和string之间的区别

7
我希望了解指针类型char *string之间的区别。 例如在以下代码中:
char *a;
string b;

有人能帮我吗?


1
@DavidHeffernan 猫可以吃饼干,饼干不能吃猫。 - Maroun
@SuvP 在极端情况下,饼干可以到达猫。 - Maroun
@SuvP 你知道它们之间有什么共同点吗? - Maroun
1
@MarounMaroun 两者都可以闲着什么都不做吗?(我希望你没有期望有任何技术相关的内容 :P) - Suvarna Pattayil
@SuvP 不是恐龙。 - Maroun
@MarounMaroun 就像它们都不是鸟一样?(让我们不要进一步污染这个帖子 :P) - Suvarna Pattayil
5个回答

16

假设您指的是std::stringstring是一个标准库类,用于建模字符串。

char*只是指向单个字符的指针。在C和C++中,存在各种函数,它们将以单个字符为参数的指针跟踪到内存,直到达到0内存值(通常称为null终止符)。通过这种方式,它建模了一串字符; strlen是执行此操作的函数之一(来自C标准库)。

如果可以选择,请使用std::string,因为您不必关心内存。


由于string是一个类,它的哪个数据成员保存我们分配给字符串的文本? - ajaysinghnegi

3

char* 是指向基本类型 char 的指针。

string 是标准模板库中的一等对象,它封装了许多功能(如连接两个字符串),使其更易于使用。

这是两个非常不同的实体!


0

很简单,char *a;声明了一个类型为char的指针'a',它将指向一个常量字符串或字符数组。String b;将b声明为string类型的对象。这里的String是一个类,包含多个字符串操作成员函数(方法)。您可以在此处查看更多详细信息:http://www.cplusplus.com/reference/string/string/

下面是一个描述string对象及其成员函数的示例程序:

#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("steve jobson");
  cout <<"hello the name of steve jobs consists of"<< str.size() << " characters.\n";
  return 0;
}

str被声明为字符串对象,并调用成员函数size()来获取字符串的大小。


0

char* 也可以是指向字符数组第0(第一)个位置的指针。在C中经常使用,因为不支持字符串的使用。


如果你声明一个指向字符数组的指针,那么你的答案是正确的,但这里是另一回事,它是一个单独的字符。 - 0decimal0
即使只有一个字符,它也是一个具有一个单元的数组。*a 指的是它的值,而 &a 指的是它在内存中的地址。 - brbtsl
我不明白你指的是哪个数组,是“逻辑”还是“物理”。 - 0decimal0

0

如果您担心功能性问题,string是一个功能强大的char*,也就是说,您不必担心space

char*

声明/初始化:char* str = "Use";

追加:XXX

查找长度:strlen(str);//需要包括<string.h>或创建自己的函数

string

声明/初始化:string str = "Use";

追加:str += " This!"

查找长度:str.length()//所有都在一个头文件中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接