HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

【プログラミングメモ】
シングルクォーテーション「'」とダブルクオーテーション「"」の違い(C言語、Arduino言語)

文責:遠藤 理平 (2016年5月11日) カテゴリ:TIPS 集(94)仮想物理実験室(247)

C言語(Arduino言語)において、シングルクォーテーション「'」とダブルクオーテーション「"」は役割が異なります。シングルクォーテーションで囲まれた文字は文字リテラル、ダブルクオーテーションで囲まれた文字列は文字列が格納されたアドレスを表します。なお、「'」は1文字を表すためだけに利用することができます。また、「"」の文字列の後には「NULL」が付け加えられます。

Arduino言語のSerial.readStringUntil関数の利用方法

Arduinoでシリアルバッファからデータを取得する Serial.readStringUntil関数を例に解説します。Serial.readStringUntil関数は引数で指定した文字、文字列が出現したら、そこまでの文字列をString型オブジェクトとして返します。

引数に文字リテラルを与える場合(OK!)

  //String型文字列として取得
  String s = Serial.readStringUntil( ' ' );

区切り文字として「半角スペース」を与えた場合です。問題なく動作します。

引数に文字列「"AAA"」を与える場合(コンパイルエラー)

  //String型文字列として取得
  String s = Serial.readStringUntil( "AAA" ); //コンパイルエラー

「"」で囲われた文字列は、文字列が格納されたメモリのアドレスを意味します。 つまり、文字列の値を「"AAA"」は文字列ではなく、文字列「AAA」が格納されたアドレスを意味するので、「AAA」文字列を指定したことになりません。

引数に文字列の値を与えるには

  //String型文字列として取得
  String s = Serial.readStringUntil( "*AAA" ); //意図通り動作

「"AAA"」はアドレスなので、「*」演算子をアドレスの前に加えた「*"AAA"」が値(文字列)を指します。

引数に「'AAA'」を与えた場合

1文字を表す「'」で、文字列を囲うとどうなるでしょうか?答えはコンパイルエラーにはなりませんが、意図通りの動作をしません。

  //String型文字列として取得
  String s = Serial.readStringUntil( 'AAA' );


▲このページのトップNPO法人 natural science トップ

関連記事

TIPS 集

仮想物理実験室







▲このページのトップNPO法人 natural science トップ