我尝试使用空值设置简单的char但没有成功。主要目标是比较std :: string单个字符和预定义字符
std::string str ="fcvfr";
char c = '' //trying to set empty char here .... but it gives me error
if(c == str[0])
{
//do something
}
这让我想到何时应该使用以下每种类型的问题:
char * , char , char[]
答案 0 :(得分:4)
char
表示一个字符(在堆栈上分配)。如果要将其设置为空,请使用char c = '\0'
或char c = (char) 0
。
char* cPtr
是指向角色的指针。您可以使用char* c = new char('\0')
在堆上分配一个空字符。
char c[n]
是一个大小为n
的字符数组。
修改强>
正如人们在下面正确指出的那样,char
永远不会是空的,就像std::vector
或std::string
这样的容器可能是空的一样。 char
与int
没有根本的区别,它只是更短(1个字节而不是2个或4个或8个)。 int
可以为空吗?不是这样;它可以为零,这意味着它的所有位在内存中都设置为零,而char也是如此。 char c = '\0'
将表示为" 00000000"在堆栈上。
另一方面,指向char(char* cPtr
)的指针可以是空的'通过将其设置为NULL
,它可以指向任何地方。在这种情况下,指针本身将存在于堆栈中,并包含一个特殊的0/1序列,系统将其解释为NULL
。执行cPtr = new char('\0')
后,将在堆上分配char
(即一个字节)并设置为" 00000000",并在堆栈上设置cPtr
的值将被更改为指向堆上新字符的地址。
PS:实际上不char* cPtr = new char('\0')
,使用std::vector<char>
或std::string
。此外,您可能需要查看smart pointers。