MW211 EXIT

devlog
シェル/書式付でechoしたい場合
2012年10月30日
書式付きで出力する。
┌──────────────────────────────────────┐
│printf "書式" 値 ...                                                        │
└──────────────────────────────────────┘
例えば「echo `printf "%02d%02d" 1 2`」だと「0102」が表示される。
分類:Linuxシェル
シェル/ファイル管理関係
2012年10月29日
空のディレクトリを作成する。
┌──────────────────────────────────────┐
│mkdir ディレクトリ                                                          │
└──────────────────────────────────────┘

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

空のファイルを作成する。(やや裏技っぽい、テスト環境作成用に)
┌──────────────────────────────────────┐
│touch ファイル                                                              │
└──────────────────────────────────────┘
分類:Linuxシェル
シェル/連携関係
2012年10月28日
ファイル一覧を削除(rmコマンド)の対象とする。
┌──────────────────────────────────────┐
│ls | xargs rm                                                               │
└──────────────────────────────────────┘
削除コマンド系はテスト実行時注意のこと。
実際は「ls」の部分はいろいろと抽出処理が実装され、
その結果を最後に「xargs」でとりこむ感じとなる。
分類:Linuxシェル
シェル/抽出関係
2012年10月26日
部分一致で文字列を抽出する。
┌──────────────────────────────────────┐
│grep "文字列"                                                               │
└──────────────────────────────────────┘

全文一致で文字列を抽出する。(正規表現を使う)
┌──────────────────────────────────────┐
│grep -E "^文字列$"                                                          │
└──────────────────────────────────────┘

部分不一致で文字列を抽出する。
┌──────────────────────────────────────┐
│grep -v "文字列"                                                            │
└──────────────────────────────────────┘
分類:Linuxシェル
C言語/文字列のコピー(2)
2012年10月23日
もう少し踏み込んで条件分岐されるならこんな感じか。
┌──────────────────────────────────────┐
│if (strlen(入力元) < sizeof(出力先)) {                                      │
│    strcpy(出力先, 入力元);                                                 │
│} else {                                                                    │
│    snprintf(出力先, sizeof(出力先), "%s", 入力元);                         │
│}                                                                           │
└──────────────────────────────────────┘
出力先は末尾の「\0」も含んだバッファサイズ(sizeof())で算出し
入力元はあくまで文字数(strlen)。
「文字数+\0≦バッファサイズ」つまり「文字数<バッファサイズ」なら
strcpy()を発動してしまってよいということになる。
分類:C/C++
C言語/文字列のコピー(1)
2012年10月22日
┌──────────────────────────────────────┐
│strncpy(出力先, 入力元, sizeof(出力先) - 1);                                │
└──────────────────────────────────────┘
strncpy()の代わりにsnprintf()も使える。
┌──────────────────────────────────────┐
│snprintf(出力先, sizeof(出力先), "%s", 入力元);                             │
└──────────────────────────────────────┘
これだと確実に末尾に「\0」を押し込めてくれる(多少速度が犠牲になるが)。
分類:C/C++
JavaScript/小数点の計算は危険
2012年10月21日
浮動小数点ってやつの危険性はJavaScriptにもある。

試しに以下をやってみると…。
┌──────────────────────────────────────┐
│alert(5.1 * 100);                                   →「509.99999999999994」│
└──────────────────────────────────────┘
分類:JavaScript
C言語/アライメントサイズの確認
2012年10月20日
アライメントサイズはコンパイラによって定義されているようだが
その実体定義の場所がわからない。

えいっ、こうなったら実地テストだ、ってのが以下。

char型の次にint型を置いた構造体を用意して、sizeof()で長さを計る。
┌──────────────────────────────────────┐
│struct {                                                                    │
│    char  a;                                                                │
│    int   b;                                                                │
│} z;                                                                        │
│printf("%d", sizeof(z));                                                    │
└──────────────────────────────────────┘
アライメントがなければ(「1」ならば)、「1+4=5」なわけだが、
結果が「8」だった。
つまり、「8=4+4」。
そうアライメントは「4」だ。
分類:C/C++
C言語/文字列のアドレスをダンプする
2012年10月19日
┌──────────────────────────────────────┐
│char str[16];                                                               │
│sprintf("%s", str);                                                         │
└──────────────────────────────────────┘
文字列のアドレスをダンプする方法。

┌──────────────────────────────────────┐
│sprintf("%x", (unsigned int)str);                                           │
└──────────────────────────────────────┘
「%s」を「%x」に切り替えて、「unsigned int」型にキャストするだけ。
分類:C/C++
C言語/define定義の落とし穴
2012年10月18日
┌──────────────────────────────────────┐
│#define    A    2                                                           │
│B = A * 3;        → 2 * 3                → 「6」                          │
└──────────────────────────────────────┘
を想定したとして…。

define定義中で数式を使うのは注意が必要。
┌──────────────────────────────────────┐
│#define    A    1 + 1                                                       │
│B = A * 3;        → 1 + 1 * 3 → 1 + 3   → 「4」                          │
└──────────────────────────────────────┘
そのまま文字列置換のように展開されてしまうので、
加減剰余の優先度によっては意図しない結果となる。

よって、優先度の低い加減が絡む場合には括弧で囲った方がよいようだ
┌──────────────────────────────────────┐
│#define    A    (1 + 1)                                                     │
│B = A * 3;        → (1 + 1) * 3 → 2 * 3 → 「6」                          │
└──────────────────────────────────────┘
分類:C/C++
前へ 1 2 3 次へ