2014-07-23 121 views
-5

我试图用空值设置简单的char而没有成功。主要目标是的std :: string单个字符和预先定义的字符之间的比较char,char [],char *之间的区别*

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

我可能会说明显而易见,但不应该是'f'(带单引号)? –

+0

此外,你错过了一个分号。如果_“它给了你[你]错误”,那么你将很高兴指定你正在获得的错误。 – Michael

+1

“空炭”是什么意思?一个角色总是有价值的。什么是'f'?你的意思是字符常量“f”吗?你得到的错误是什么,如果你添加缺少的';',你还会得到它吗? –

回答

4

char代表一个字符(分配在堆栈上)。如果您想将其设置为空,请使用char c = '\0'char c = (char) 0

char* cPtr是一个指向角色的指针。您可以使用char* c = new char('\0')在堆上分配一个空字符。

char c[n]是大小为n的字符数组。


编辑

由于人们正确地指出了下面,一char从来都不是空的,在同样的意义作为容器如std::vectorstd::string可以是空的。 A char与例如int没有本质上的区别,它只是更短(1字节而不是2或4或8)。 int可以为空吗?不是这样;它可以是零,这意味着它的所有位在内存中设置为零,并且字符也是一样。 char c = '\0'将在堆栈上表示为“00000000”。

另一方面,指向char(char* cPtr)的指针可以是'空'的,因为它可以指向任何地方,通过将其设置为NULL。在这种情况下,指针本身将存在于堆栈中,并且将包含您的系统解释为NULL的特殊序列0/1。一旦你做了cPtr = new char('\0'),一个char(即一个字节)将被分配到堆上并设置为“00000000”,堆栈上的cPtr的值将被更改为指向堆上新字符的地址。

PS:实际上并没有char* cPtr = new char('\0'),请使用std::vector<char>std::string。此外,你可能想看看smart pointers

+0

空终止符与“空”不同。 –

+0

在内存中,字符的字节将被初始化为零。就我所能想到的角色而言,这几乎是“空洞的”。当然,指针可以设置为NULL,但我不认为这就是OP的意思(但不确定)。 – MGA

+1

'char'永远不会是空的。一个字符串(不论其表示形式)可以是空的,但是一个字符总是恰好一个字符(或者一个字符的一部分,例如,如果你使用的是UTF-8)。 –

相关问题