
プログラミング初心者です。
早速ですが現在、C言語入門書に目を通している最中なのですが理解出来ない部分が有ります。
内容としましては 「エスケープ文字」 に関してです。本書ではあまり理解出来なかったのでネットで検索していると、「エスケープシーケンス」 と言う用語も数多く出てきました。
いろいろ検索し私なりに出した答えは.....
•エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。
•エスケープシーケンス = 改行などの特殊な文字を英数字の組み合わせで表現した物。
と....上記の様に私は理解しているのですが現在読んでいるC言語入門書の内容だとエスケープ
シーケンスと考えられる説明が 「エスケープ文字」 として記述されています。
それはC言語ならではの扱い方なのか?、本書の内容が間違っているのか?
分かりづらい説明だと思うのですがよろしくお願いいたします。
因に現在読んでいる入門書は 「読本C-C言語徹底攻略」 と言う本でかなり昔のになります。
No.9
- 回答日時:
> では回答者様が提示した上記リンク先内容の「エスケープ文字」の概念はC言語では存在しないと言う事でしょうか?
いえ、そうではありません。ちゃんと存在します。たまたま、同じようなことが書かれていたので、これを見たのかなと思っただけですので深い意味で紹介したわけではありません。
> もしそうでない場合、「\n」は「エスケープ文字」と「エスケープシーケンス」意味が混同してしまうと思います。
そうなんです、混同して使う方がいらしゃるので現実はややこしい事になっているのですね。
本来の意味としてはinput_outputさんの理解であっています。ただ
エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。
こう書くと誤解される表現になってしまいます。この文章について、違うよと回答されている方は誤解されてるのだと思います。
エスケープ文字 = 特殊な意味を持つ文字(制御文字等)の直前に記載することによりその意味を無効にする文字
とうことですよね。エスケープ文字をエスケープ文字として認識させないために直前にエスケープ文字を記載する状態。
今読まれている解説書が、エスケープ文字とエスケープシーケンスを同じとして解説しているのでしたら、本来は間違っていますが、同じ意味で使われていると考えてお読みになるとよろしいかと思います。ただ、あちらこちらで意味が本来の意味として解説していたり混同して解説していたりするのでしたら、別の解説書に変更したほうが頭が痛くならなくてすみます。
No.7
- 回答日時:
#4の方へ
OSや処理系などによるのかもしれませんがunix系やWindowsでは
復帰 0x0d
改行 0x0a
であり、Cコンパイラが"\n"を変換する際には改行の0x0aになります。
0x0aの前に0x0dが付加されるのはまた別の所です。
No.6
- 回答日時:
>下記リンク先にて引用しました。
>http://wa3.i-3-i.info/word11732.html
>
>もし、C言語と他の言語では「エスケープ文字」に関しての定義が異なるのであれば同義語と言う形で納得出来るのですが.....
そのリンク先には
>エスケープ文字とは
>そいつを前に置くと特別な意味が無効になるよ、な文字のこと。
>あるいは
>エスケープシーケンスとして認識させるための文字のこと。
>です。
と2つの意味で書かれていますけど、その一方だけ引用されているのは何故でしょうか。
私がエスケープ文字を説明するなら
・次の文字の意味を通常とは異なる意味に変える文字(ただし「文字の通常の意味」は言語などにより異なる)
になるかと思います。
例えばC言語のリテラル文字列は文字"で前後を挟んだ形"~"で表されますが、最初の"をリテラル文字列の開始し文字を順に解釈していくとするならば、
文字"は通常の意味では文字列の終端ですがエスケープ文字を前に置くことで文字"そのものに意味が変わります。
文字\は通常の意味ではエスケープ文字ですがエスケープ文字を前に置くことで文字\そのものに意味が変わります。
文字nは通常の意味では文字nそのものですがエスケープ文字を前に置くことで改行文字に意味が変わります。
正規表現だと
文字.は通常の意味では任意の1文字ですがエスケープ文字を前に置くことで文字.そのものに意味が変わります。
No.5
- 回答日時:
>•エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。
これが間違いの元ですね。真逆です。
エスケープ=文字が持つ本来の意味と異なる別の意味を与えること
です。n は本来の意味はアルファベットのエヌなわけですが、\n でエヌと異なる改行の意味になったりします。
\n は2文字ですが、もっと多くの文字列に別の意味を与えることもあるので、一般的にはエスケープシーケンスと呼びます。例えば、Unix/Linuxで使われる一般的な端末の画面クリアは、Cの文字列表記で表すと "\E[2J" というエスケープシーケンスです。
ちなみに、「文字が持つ特別な意味を無効にすること(文字の本来の意味として扱わせること)」を引用とかクォートと言います。ただし、ややこしいことに、クォートとエスケープは混同されて使われることがほとんどです。
No.4
- 回答日時:
エスケープ文字は次くる文字の意味を変える。
エスケープ文字と次の文字の組がエスケープシーケンスという理解でいいと思います。意味の変え方は処理系によって異なる事はあり得ます。¥nがNew Lineなどは一般的ですが。Cコンパイラーは¥nを見つけると0x0D0Aという文字コードに変換し、テレタイプは改行と一行の紙送りを行うなどです。テレタイプをエミュレートする表示ドライバーは改行と次行へのカーソル移動を行う。こんな感じです。で¥¥ですが¥そのものを出力したい場合は¥一つだと次の文字と一緒にしてエスケープシーケンスと理解されてしまいます。¥を出力したい場合は¥¥と書く訳です。
なお定義されていないエスケープシーケンスがあると¥の文字が無視され(すなわち取れ除かれ)ます。
No.3
- 回答日時:
その解説書ではどちらも同じ意味(エスケープシーケンス)で使われていると思われます。
間違いといえば間違いだと思いますが、解説書によっては、たとえば「\n」全部をエスケープ文字としたり「\」のみをエスケープ文字としたりするので、そのあたりは曖昧に使われていると感じます。本来は「\」がエスケープ文字で、「\n」がエスケープシーケンスで正解でしょう。
> エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字
たぶんこちらをご覧になられたのかもしれませんが
http://msdn.microsoft.com/ja-jp/library/aa559665 …
それだけ読むと、誤解されるような表現ですね。
この回答への補足
http://msdn.microsoft.com/ja-jp/library/aa559665 …
では回答者様が提示した上記リンク先内容の「エスケープ文字」の概念はC言語では存在しないと言う事でしょうか?
存在しないとなれば一般的に同義語で扱われている事も納得できます。
もしそうでない場合、「\n」は「エスケープ文字」と「エスケープシーケンス」意味が混同してしまうと思います。
また私の考えが誤っている場合は指摘をお願いいたします。
No.2
- 回答日時:
例えば
http://www.tohoho-web.com/js/string.htm
ではエスケープ文字の説明で
文字列の中では、バックスラッシュ(\)に続く 1 文字は特別な意味を持ちます。これらの文字をエスケープ文字と呼びます。
\n - ニューライン(改行文字)
などと書いてありますが,説明がおかしい。
ちゃんとした定義では,この例だと
「\」がエスケープ文字であり,「\n」がエスケープシーケンスです。そして「n」はエスケープされた文字。
この回答への補足
私は「エスケープシーケンス」を下記の様に理解しているのですがよろしいでしょうか?
「エスケープシーケンス = 改行などの特殊な文字を英数字の組み合わせで表現した物。」
もし私の理解の仕方が間違っているのであれば指摘をお願いいたします。
また「エスケープ」とは具体的に何なのでしょうか?
No.1
- 回答日時:
>それはC言語ならではの扱い方なのか?、本書の内容が間違っているのか?
ご自分で導きだした答えが間違ってるという考えはありませんか?
具体的にはこれ。
>エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。
この回答への補足
「C エスケープ文字」と検索した結果と「C エスケープシーケンス」と検索した結果は基本的に「改行などの特殊な文字を英数字の組み合わせで表現し物。」と言う様なニュアンスで書かれています。
つまり同義語の様な捉え方で良いと言う事ですか?
また、>エスケープ文字 = 文字が持つ特別な意味を無効にする為の文字。
と言う内容はC言語に関しての内容では有りませんが、下記リンク先にて
引用しました。
http://wa3.i-3-i.info/word11732.html
もし、C言語と他の言語では「エスケープ文字」に関しての定義が異なるのであれば同義語と言う形で納得出来るのですが.....
また私が誤った考えをしている場合は指摘をお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(社会・学校・職場) 平均的日本人の頭は悪くはないはずですし、学校で習う内容が幼稚というわけでもないのに、世間には幼稚な大 7 2023/04/05 20:51
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- 英語 私の実力と翻訳アプリなどでは専門的な言葉が多すぎて難しいので英語が得意な方にお願いしたいです。 内容 2 2022/06/13 00:32
- 日本語 日本語 読書 勉強 漢字ちょう(日本の中学生まで) 現代文単語(高校生の教科書) というのを私は、や 3 2022/09/11 18:51
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- 大学受験 本気で困ってます! 大学受験/現代文の参考書ルートについて質問です! 現代文の参考書ルートについてで 2 2023/08/13 20:07
- その他(プログラミング・Web制作) 変換のプログラムを教えてください。 6 2023/07/01 09:57
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- 日本語 意味とは何か? どこにあるのか?(Ⅱ) 4 2022/04/21 13:35
- 日本語 脳科学の奇妙な言語獲得論 2 2022/04/04 13:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報