WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

C言語における文字列リテラル

      2015/01/14

C言語における文字列リテラル

C言語では文字列リテラルは”(ダブルクオテーション)で囲まれる。例えば、”Hello”や”Goodbye”などが文字列リテラルであるといえる。

RubyやPHPなどの言語では”以外にも、'(シングルクオテーション)で囲んでも文字列リテラルを定義することができる。この場合、”で囲む場合との違いは変数展開やエスケープシーケンスの解釈を行うかどうかである。
以下はRubyでの例。

irb> name = "Kohta"
irb>  "Hello #{name}"
 => "Hello Kohta" 
irb> 'Hello #{name}'
 => "Hello \#{name}"

C言語では’はchar型(ひとつの文字)を表すときに使われる。
したがって、’Hello’や’Goodbye’のような文字列の表現に’を用いるのは間違いである。

例えば、以下のソースコードはコンパイルエラーを起こす。

#include <stdio.h>

int main(void) {
    puts('Hello');
}

C言語には文字列型というデータ型は存在せず、文字列リテラル(“Hello”など)は単にchar型の配列である。
ただし、配列の最後には文字列の終端を表す文字である ‘\0’(ヌル文字)がついているので、配列の要素数は文字数 + 1となる。

“Hello”だと、メモリ上に’H’,’e’,’l’,’l’,’o’,’\0’が配置され、”Hello”は頭文字である’H’へのポインタが得られる。
したがって、文字列の正体はchar型へのポインタである。

PHPなどのインタプリタ言語からプログラミングをはじめた自分にはこの点がわかりにくかった。

 - C言語 , , ,