風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

C

printfの%n

C

#include <stdio.h> int main(void) { static const char func[] = "main"; int n; printf("function %s%n\n", func, &n); printf("n: %d\n", n); // n => 13 return 0; } \nを%nと間違えて打ったらこあだんぷしたので調べた。 そこまで出力した文字数が n に格納され</stdio.h>…

ポインタワンポインタ

C

とっさに聞かれて答えられなくて枕を涙で濡らす思いをしたので。 char (*a)[10]; char *b[10]; printf("sizeof((*a)[10]):%d, sizeof(*b[10]):%d\r\n", sizeof(a), sizeof(b)); それぞれいくつ?

CFAQを読む-5

C

http://www.kouno.jp/home/c_faq/c5.html#0 こっから。 5.1 アドレス空間とポインタのサイズがぴったり合うようなアーキテクチャだと、ぬるぽって どう表現するんだろうなぁ…。 5.2 ポインタ計算中に出てくるリテラル0はぬるぽを表すよ。 可変引数関数だと、…

CFAQを読む-4

C

http://www.kouno.jp/home/c_faq/c4.html#0 4.2 やるよね。やるやる。ポインタ指定子は宣言時と式中では扱いが違うのよね。 4.3 *p++ は *(p++) と同義。配列アクセスするときにはよく使います。 4.5 キャストは右辺値を生み出すので、それに代入も++もでき…

CFAQを読む - 2

C

http://www.kouno.jp/home/c_faq/c2.html#0 2.1 x1は実際に使うときも struct x1 local_x1; という使い方になる。 2.4 ------ typedef struct { int x; int y; } DATA; ------ ------ typedef DATA* P_DATA; ------ 使う側は P_DATA をモジュールから取得し…

strlcat

C

strlcpyと同じ系。 size_t strlcpy(char *dst, char *src, size_t size) dstの末尾('\0'の位置)から、srcをくっつける。 strlen(dst) + strlen(src) > size であれば、size-1までつなげて、 末尾をヌル止めする。 sizeにはsizeof(dst)を入れるのが普通。strl…

配列の初期化

C

int a[10] = {0}; の意味は? 1. 配列 a の全ての要素を 0 で初期化する 2. 配列 a の最初の要素に 0 を入れる int a[10] = {1, 2, 3,}; は書き方としてOK?

strncmp

C

int strncmp(const char *s1, const char *s2, size_t len) s1とs2をlen分比較し、その結果を返す。 s1 > s2 なら正、 s1 = s2 なら0、 s1 実装依存。 大体は違いがあった文字の差が返る。 s1 = "1003"; s2 = "1000"; だと、 strncmp(s1, s2, strlen(s2)); …

strchr

C

http://0xcc.net/blog/archives/000190.html if(strchr("abcd", c)){ } ifの条件が真になるのは、cが'a', 'b', 'c', 'd', '\0'(!)のとき。 へぇー。 なんとなく\0の前までを探索するイメージがあったなぁ。 そういや、 c が、自分が欲しい文字かどうかを調べ…

strcpy, strncpy, strlcpy

C

strcpy(char *dst, const char *src) dstのサイズよりsrcのほうが大きいとdstの後ろを壊すので使わない。 strncpy(char *dst, const char *src, size_t size) size文字分コピーするので、dstのサイズを知っている場合、メモリを壊さないように書けるけど、 …

ディレクトリの内容を表示したい

C

そういえばディレクトリアクセスってCだと面倒なんだろうなーとか勝手に思ってたんだけど、 便利な関数がありました。 小俣光之:コンピューターのページ(C言語講座)http://www.ncad.co.jp/~komata/c-frame.htm メニューのリンク「・ディレクトリ内容の読…

(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) ol.className = "preLine" ol.setAttribute("role", "presentation") for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)