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" 、charとしてパラメータを持つ関数では、文字列を引数として渡すことはできません。この場合、VSコンパイラは文字列をintに変換できないと言っています。また、charとchar*の違いを教えてください。私はPHP開発者であり、C++は非常に混乱しています。私を助けてください。

4

4 に答える 4

7

char一度に1文字しか保持できません。この場合、最後の文字を保持します'x'char *は1つ以上のcharオブジェクトへのポインタであり、正しく読み取られれば、文字列としても使用できます。だから設定

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

名前全体を出力する必要があります。

もう1つの問題は、引用符の使用です。'x'char、を示し、は文字列リテラルとして知られるsの"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";

これにより、sのローカル配列が作成されますchar(つまり、char配列の最後にヌル文字が追加されるため、5秒)。したがって、呼び出しchName[3]はを返す必要があり'x'ます。coutこれは、他の人と同じようにストリーミングすることもできます

cout << chName;

編集:ちなみに、int関数でを返す必要がありますmain ()。のように0

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

これは間違っています。このようにして、Alexから4バイトの整数を作成し、それをcharに格納します。もちろん、1バイトのcharには収まらないため、重要度の低いバイトのみxが格納されます。その後、出力されます。あなたが使用する必要があります

const char *chName = "Alex";

正しい出力を取得します。

問題の代替案: C ++で作業しているので、を使用しますが、引数としてstd::stringaを期待する関数には、次を使用します。char *

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";へのポインターを宣言し、そのポインターは文字列リテラルの最初の文字を指します。したがって、プログラムは次のようになります。charchar"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 は
1つの ascii 文字を格納できる char変数ですが、 は char 変数のアドレスを格納できる char へのポインタです。char ch;char *ch;

char と String の違いについては、この SO 投稿
を参照してください。

于 2012-06-19T16:52:37.293 に答える