5

当我使用 char 或 char* 时,Visual Studio 2012(11) 只会输出最后一个字符,例如:

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

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

4

4 回答 4

7

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

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

应该输出全名。

另一个问题是你对引用的使用。'x'表示 a char,而"x"表示 s 的数组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";

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

cout << chName;

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

于 2012-06-19T16:49:49.427 回答
4
char chName = 'Alex';

这是错误的。这样,您从 Alex 创建了一个四字节整数,然后将其存储在 char 中——当然,它不适合单字节 char,所以只有它的不太重要的字节x被存储,然后输出。你需要使用

const char *chName = "Alex";

以获得正确的输出。

您的问题的替代方法:使用std::string,因为您在 C++ 中工作,但对于那些期望 achar *作为其参数的函数,请使用:

std::string str; // C++ string object
function_call(str.c_str());
于 2012-06-19T16:47:53.053 回答
2

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

您使用的 char 文字语法:

char chName = 'Alex';

被称为多字符文字,它有一个实现定义的 type 值int。我熟悉的实现通过连接各个字符的值来构造它。所以 的值'Alex'可能是 A 0x41、l 0x6C、e 0x65、x 0x78 或0x416C6578。然后,当您将其分配给 char 时,它会被截断为最后一个字节(因为这是 char 可以容纳的所有字节),即 0x78,或与'x'.

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

#include <iostream>

int main(){
  const char *chName = "Alex"; 
  std::cout << chName;
}
于 2012-06-19T16:50:48.930 回答
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* 的区别
ch 中char ch;char 变量,可以存储单个 ascii 字符,而指向 charchar *ch;的指针可以存储 char 变量的地址。

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

于 2012-06-19T16:52:37.293 回答