我糊涂了! C ++中的Char,Char *或String

时间:2012-06-19 16:44:06

标签: c++ c-strings

当我使用char或char *时,visual studio 2012(11)只会播放最后一个字符,例如:

#include <iostream>
#include <string>
int main(){
 using namespace std;
 char chName = 'Alex'; 
 cout<<chName;
}

仅显示“x”。这是正确的是我使用 string strName = "Alex"  但是在那些将参数作为char的函数中,string不能作为参数传递。在这种情况下,VS编译器说字符串不能转换为int。 还告诉我char和char *之间有什么区别。 我是一名PHP开发人员,C ++非常混乱。请帮帮我。

4 个答案:

答案 0 :(得分:7)

char一次只能保留1个字符;在这种情况下,它会保留您的上一个字符'x'char *是指向一个或多个char对象的指针,如果读取正确,也可以用作字符串。所以设置

const char *chName = "Alex";
cout << chName;

应输出全名。

另一个问题是您使用引文。 'x'表示char,而"x"表示char的数组,称为字符串文字。

如果有一个要求你传递char *的函数,你可以传递

const char *param = "this is da parameter";
function (param);

std::string param = "da parameter"; //std::string is a type of string as well.
function (param.c_str ());

您也可以使用声明

char chName[] = "Alex";

这将创建一个char s的本地数组(即5 char s,因为它在数组的末尾附加一个空字符)。因此,调用chName[3]应该返回'x'。这也可以像其他人一样流式传输到cout

cout << chName;

编辑:顺便说一句,您应该在函数int中返回main ()。与0一样。

答案 1 :(得分:4)

char chName = 'Alex';

这是错误的。这样,你用Alex创建一个四字节整数,然后将它存储在一个char中 - 当然,它不适合一个字节的字符,所以只有它不太重要的字节,{{1}存储,然后输出。你需要使用

x

获得正确的输出。

您问题的替代方法:使用const char *chName = "Alex"; ,因为您使用的是C ++,但对于那些期望std::string作为参数的函数,请使用:

char *

答案 2 :(得分:2)

char chName = 'Alex';  

是一个多字符文字,它是实现定义的。

_ C++ standard, §2.14.3/1 - Character literals _

An ordinary character literal that contains more than one c-char is a multicharacter     
literal . A multicharacter literal has type int and implementation-defined value.

而不是这个,你应该使用

const char *chPTR = "Alex";    

char chName[] = "Alex";

char和char之间的区别*
char ch; ch中是 char变量,它可以存储单个ascii字符,而char *ch;指向char 的指针,可以存储a的地址char变量。

char和String之间的区别
this SO post

答案 3 :(得分:1)

char类型包含单个整数值,通常范围为-128到127.它不是字符串类型。 C中的单引号用于字符文字,而不是字符串文字。 'Alex'"Alex"不同。

您使用的字面文字语法:

char chName = 'Alex';

称为多字符文字,它具有类型为int的实现定义值。我熟悉的实现通过连接各个字符的值来构造它。所以'Alex'的值可能是A 0x41,l 0x6C,e 0x65,x 0x78或0x416C6578。然后,当你将它分配给一个char时,它会被截断为最后一个字节(因为所有char都可以保存),即0x78,或者与'x'相同。

*是C中的指针引用运算符,它也在声明指针时使用。因此const char *chName = "Alex";声明指向char而不是单个char的指针,该指针将指向字符串文字"Alex"的第一个字符。所以你的程序可能看起来像:

#include <iostream>

int main(){
  const char *chName = "Alex"; 
  std::cout << chName;
}