MW211 EXIT

devlog
C言語/続・アライメントサイズの確認
2012年11月08日
┌──────────────────────────────────────┐
│struct {                                                                    │
│    char  a;                                                                │
│    int   b;                                                                │
│} z;                                                                        │
│printf("%d", sizeof(z));  →8(1+空3+4)                                    │
└──────────────────────────────────────┘
のように、int型の直前にアライメント端数があると、空き地を設けてくれるわけだが
┌──────────────────────────────────────┐
│struct {                                                                    │
│    int   b;                                                                │
│    char  a;                                                                │
│} z;                                                                        │
│printf("%d", sizeof(z));  →8(4+1+空3)                                    │
└──────────────────────────────────────┘
実は、構造体の末尾でも同じことがいえる。

つまり、構造体のサイズはアライメントの倍数であることが保証されるわけだ。

よって、以下の数式で構造体配列の配列数を正しく求めることもできる。
┌──────────────────────────────────────┐
│配列数 = sizeof(配列) / sizeof(配列[0]);                                    │
└──────────────────────────────────────┘
分類:C/C++
C/sscanf()の挙動
2012年11月07日
┌──────────────────────────────────────┐
│単語数 = sscanf(対象文字列, "%d,%d,%d", 取得A, 取得B, 取得C);               │
└──────────────────────────────────────┘
上記のような感じで、対象文字列が以下の場合の結果は
  ・「1,2,3」の場合  →単語数=3、取得A-B-C=1-2-3  正常な場合
  ・「1,2」の場合    →単語数=2、取得A-B-C=1-2-0  成功したところは取得できる
  ・「1,2,」の場合   →単語数=2、取得A-B-C=1-2-0  成功したところは取得できる
  ・「1,2,a」の場合  →単語数=2、取得A-B-C=1-2-0  成功したところは取得できる
  ・「1,,3」の場合   →単語数=1、取得A-B-C=1-0-0  成功したところは取得できる
  ・「1,a,3」の場合  →単語数=1、取得A-B-C=1-0-0  成功したところは取得できる
  ・「,2,3」の場合   →単語数=0、取得A-B-C=0-0-0  冒頭でこけたら全滅する
  ・「a,2,3」の場合  →単語数=0、取得A-B-C=0-0-0  冒頭でこけたら全滅する
  ・「」の場合       →単語数=0、取得A-B-C=0-0-0  空文字は例外とはならない
  ・「a」の場合      →単語数=0、取得A-B-C=0-0-0  該当なしも例外とはならない
  ・「1,2,3,4」の場合→単語数=3、取得A-B-C=1-2-3  実は正常な場合と区別できず
  ・「(NULL)」の場合 →例外発生
※取得A-B-Cは「%d-%d-%d」で出力したものです
分類:C/C++
C/フォーマット指定子
2012年11月06日
入力系フォーマット指定子
┌──┬───────────────────────────────────┐
│%c  │char型                                                                │
│%s  │文字列                                                                │
├──┼───────────────────────────────────┤
│%d  │整数(10進・符号あり)                                                  │
│%u  │整数(10進・符号なし)                                                  │
│%o  │整数( 8進)                                                            │
│%x  │整数(16進)                                                            │
├──┼───────────────────────────────────┤
│%ld │long型整数(10進・符号あり)                                            │
│%lu │long型整数(10進・符号なし)                                            │
│%lo │long型整数( 8進)                                                      │
│%lx │long型整数(16進)                                                      │
├──┼───────────────────────────────────┤
│%f  │小数                                                                  │
│%lf │double型小数                                                          │
└──┴───────────────────────────────────┘
他に「%e」「%g」もある

出力系フォーマット指定子
┌──┬───────────────────────────────────┐
│%c  │char型                                                                │
│%s  │文字列                                                                │
├──┼───────────────────────────────────┤
│%d  │整数(10進・符号あり)                                                  │
│%u  │整数(10進・符号なし)                                                  │
│%o  │整数( 8進)                                                            │
│%x  │整数(16進)                                                            │
├──┼───────────────────────────────────┤
│%hhd│char型整数(10進・符号あり)                                            │
│%hhu│char型整数(10進・符号なし)                                            │
├──┼───────────────────────────────────┤
│%hd │short型整数(10進・符号あり)                                           │
│%hu │short型整数(10進・符号なし)                                           │
├──┼───────────────────────────────────┤
│%ld │long型整数(10進・符号あり)                                            │
│%lu │long型整数(10進・符号なし)                                            │
│%lo │long型整数( 8進)                                                      │
│%lx │long型整数(16進)                                                      │
├──┼───────────────────────────────────┤
│%f  │小数                                                                  │
│%lf │double型小数                                                          │
└──┴───────────────────────────────────┘
分類:C/C++
設計/小数部を含む整数の用語定義
2012年11月05日
「123」とかのことを「整数」と記載した場合、
「123.45」とかのことをなんと記載しようかと悩んだ。

「0.45」って小数部が付いてるから「小数付整数」?
いやいや「小数点付整数」?

なんかしっくりこない。

そこで本格的に調べてみた。

結論は…。


「小数」


え?
「小数」ってのは「整数部+小数点+小数部」のことらしい。
「小数」と聞いてなんとなく思い浮かぶ「0.1」とかは、「純小数」といい、
我らが「123.45」(こいつは「帯小数」というらしい)と合わせて
「小数」っていうんだって。

なんだか、すげーあいまいなまま生きてきたんだなぁ。
分類:設計
C/【未解決】strlen()の柔軟性
2012年11月04日
やみくもに「strlen()」を使っていいものか?

末尾の「\0」を探してサイズを算出してくれるんなら
多少大目にサイズが算出されてもいいんじゃない?
#自分の領域にうっかり「\0」がなくても、
  となりの領域に「\0」があればそこまでのサイズを算出してくれそうだし。。。

でも、莫大なサイズだったらどうしよう?
#ってそんなに「\0」が続かない領域ってあるの?

っていうかたまたま全領域の末尾だったら「\0」がなくてってこともありうるなぁ
#全領域の末尾あたりで作業することってそんなにあるのかな?

ってなことを考えた。

もし仮に、「strlen()」をやみくもに使っていいのであれば、
なんだか出自の知れないポインタをとりあえず「strlen()」でサイズを計ってから
処理するってこともできるし。。。

でも、となりの領域に侵入した時点でアウトみたい。
#でも、実験したら場合によりけりみたいだけど(結論的にはアウトなんでしょう)。

正確な情報を知りたいものだ。
分類:C/C++、【未解決】
PostgreSQL/INSERT件数
2012年11月03日
「INSERT INTO 出力先 SELECT 入力元」みたいな、INSERT文を実行した場合、
実際に何件挿入されたか気になるところ。

実行直前と直後にそれぞれ「SELECT COUNT(*)」で件数を取得して差分をとるという
地道な方法以外に件数を簡単に取得する方法はないものか

PL/pgSQLだったら、以下で挿入件数を取得できる。
┌──────────────────────────────────────┐
│GET DIAGNOSTICS 変数(INTEGER型) = ROW_COUNT;                                │
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/文字列をtimestamp型に変換する方法
2012年11月02日
┌──────────────────────────────────────┐
│SELECT TO_TIMESTAMP('2013-01-30 16:13:18','YYYY-MM-DD HH24:MI:SS');         │
└──────────────────────────────────────┘
みたいな感じ。

第二引数のYとかMとかは「書式テンプレートパターン」ってやつを参照のこと。

たいていは、その前にtimestamp型を文字列に変換していたりするので、
その逆をやればいいということになる。
┌──────────────────────────────────────┐
│SELECT TO_CHAR(NOW(),'YYYY-MM-DD HH24:MI:SS');                              │
└──────────────────────────────────────┘
分類:PostgreSQL
シェル/メッセージの抑止
2012年11月01日
┌──────────────────────────────────────┐
│ls 2> /dev/null                                                             │
└──────────────────────────────────────┘
lsコマンドで該当なしエラーメッセージを抑止する方法。

┌──────────────────────────────────────┐
│rm -f                                                                       │
└──────────────────────────────────────┘
rmコマンドで該当なしエラーメッセージや確認メッセージを抑止する方法。
分類:Linuxシェル
シェル/書式付でechoしたい場合
2012年10月30日
書式付きで出力する。
┌──────────────────────────────────────┐
│printf "書式" 値 ...                                                        │
└──────────────────────────────────────┘
例えば「echo `printf "%02d%02d" 1 2`」だと「0102」が表示される。
分類:Linuxシェル
シェル/ファイル管理関係
2012年10月29日
空のディレクトリを作成する。
┌──────────────────────────────────────┐
│mkdir ディレクトリ                                                          │
└──────────────────────────────────────┘

ディレクトリを削除する。
┌──────────────────────────────────────┐
│rm -r ディレクトリ                                                          │
└──────────────────────────────────────┘
空であっても「-r」は必須のようだ。

空のファイルを作成する。(やや裏技っぽい、テスト環境作成用に)
┌──────────────────────────────────────┐
│touch ファイル                                                              │
└──────────────────────────────────────┘
分類:Linuxシェル
前へ 1 … 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 … 156 次へ