C 文字列 新しいページはコチラ
提供: yonewiki
(→文字列) |
|||
1行: | 1行: | ||
+ | [[C PlusPlus#Cにもあった技術|C++]]へ戻る | ||
+ | |||
+ | |||
※このページではC言語にも存在していたという意味で記事タイトルがC 文字列になっていますが、<br /> | ※このページではC言語にも存在していたという意味で記事タイトルがC 文字列になっていますが、<br /> | ||
[[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | [[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br /> | ||
<br /> | <br /> | ||
== '''文字列''' == | == '''文字列''' == | ||
+ | |||
文字はChar型で1文字を表現できるのでした。<br /> | 文字はChar型で1文字を表現できるのでした。<br /> | ||
例 ※C++の場合のみcout関数が使えます。#include <iostream>が必要<br /> | 例 ※C++の場合のみcout関数が使えます。#include <iostream>が必要<br /> | ||
188行: | 192行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
というお話でした。どうでしょう。納得していただけたでしょうか。printf関数でアドレスを引数にpcCharとして%c書式でで出力しようとするとおそらくアドレス番号の下位1バイトの文字コードが動かすたびに割り当てられるアドレスが異なるのでランダムに出力されるでしょう。x64(64bitPC)もx32(64bitPC)もリトルエンディアンという方式で値を格納しているので、32bitアプリの4byteで構成されるpcCharには、上記の例で言うと先頭のアドレスには2Bが格納されています。これを%cで出力するということは、2B以外をそぎ落とした形で処理され、文字コードの2Bに相当する"+"プラス記号が表示されます。C言語の文字列という話だけで、ここまで掘り下げて理解してたら日が暮れる。Char型でアドレス変数である pcCharをCout関数で出力すると文字列として出力しようとしますから、アドレスを表示する場合には(void*)pcCharとして、ポインタ型にキャストすることで、アドレスが表示がされます。<br /> | というお話でした。どうでしょう。納得していただけたでしょうか。printf関数でアドレスを引数にpcCharとして%c書式でで出力しようとするとおそらくアドレス番号の下位1バイトの文字コードが動かすたびに割り当てられるアドレスが異なるのでランダムに出力されるでしょう。x64(64bitPC)もx32(64bitPC)もリトルエンディアンという方式で値を格納しているので、32bitアプリの4byteで構成されるpcCharには、上記の例で言うと先頭のアドレスには2Bが格納されています。これを%cで出力するということは、2B以外をそぎ落とした形で処理され、文字コードの2Bに相当する"+"プラス記号が表示されます。C言語の文字列という話だけで、ここまで掘り下げて理解してたら日が暮れる。Char型でアドレス変数である pcCharをCout関数で出力すると文字列として出力しようとしますから、アドレスを表示する場合には(void*)pcCharとして、ポインタ型にキャストすることで、アドレスが表示がされます。<br /> | ||
+ | |||
+ | |||
+ | ★まめ知識 | ||
+ | Visual StudioのDebugモードではデバッグ無しでプログラムを実行するのようなプログラム動作時にはプログラムが利用するメモリ領域を0x10101010で1Byteの空間を初期化してくれます。これは0xCCでシフトJISの1バイト文字のコードで半角カタカナの”フ”に相当します。なので、初期化されていない領域を出力しようとするcout命令やprintf命令が半角カタカナのフを出力したことになります。\0が無いと出てくるおもしろい現象です。フフフフフで検索すると結構おもしろい2ch(巨大掲示板2ちゃんねる)の記事にたどり着ける。 | ||
204行: | 212行: | ||
最近はMediaWikiの中に文字を打ち込む時間も多く取れてるので、更新していけるような気がする。でも今日はここまでかな。<br /> | 最近はMediaWikiの中に文字を打ち込む時間も多く取れてるので、更新していけるような気がする。でも今日はここまでかな。<br /> | ||
<br /> | <br /> | ||
− | [[C PlusPlus|C++]]へ戻る | + | |
+ | |||
+ | [[C PlusPlus#Cにもあった技術|C++]]へ戻る |