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

Suc*_*hal 5 c++ c-strings

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

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

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

GIL*_*ESH 7

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

const char *chName = "Alex";
cout << chName;
Run Code Online (Sandbox Code Playgroud)

应该输出整个名字.

另一个问题是你使用报价.'x'表示a char,while "x"表示chars 的数组,称为字符串文字.

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

const char *param = "this is da parameter";
function (param);
Run Code Online (Sandbox Code Playgroud)

要么

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

您也可以使用声明

char chName[] = "Alex";
Run Code Online (Sandbox Code Playgroud)

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

cout << chName;
Run Code Online (Sandbox Code Playgroud)

编辑:顺便说一句,你应该int在你的函数中返回一个main ().喜欢0.

  • 我不知道"你应该在函数main中返回一个int".C++允许main(但没有其他函数)省略return语句.如果省略,则返回0. (2认同)
  • @Griwes:良好的实践和良好的可读性. (2认同)

Eig*_*ght 2

char chName = \'Alex\';  \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
_ C++ standard, \xc2\xa72.14.3/1 - Character literals _\n\nAn ordinary character literal that contains more than one c-char is a multicharacter     \nliteral . A multicharacter literal has type int and implementation-de\xef\xac\x81ned value.\n
Run Code Online (Sandbox Code Playgroud)\n\n

而不是这个,你应该使用

\n\n
const char *chPTR = "Alex";    \n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
char chName[] = "Alex";\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

char 和 String 之间的区别
\n请参阅此帖子

\n