2009-07-12から1日間の記事一覧

K&R本一通り読み終えて

C K&R

付録以外の1〜8章まで全て読み終わりました。基本的な部分は勉強済みだったので割とスンナリ読めました。ただ最後の最後、8.7の記憶割り当ての話はちょっと難しすぎて今の段階では良くわからなかったです。この辺の話をわかりやすく説明してる書籍やWebサイ…

低水準入出力の速度比較

C K&R

K&R本 演習8-1とりあえずファイルのオープンだけでやってみました。 #include <io.h> #include <fcntl.h> #include <stdio.h> #include "mylib.h" #define BUFSIZE 1024 void stdio_cp (void) { FILE *fp; errno_t err; char buf[BUFSIZE]; if ( (err = fopen_s(&fp,"test1.txt","r")</stdio.h></fcntl.h></io.h>…

プログラムから別のコマンドを実行する

C K&R

K&R本 7.8.4system関数を使えば、別のコマンドを実行できる。ためしに自分自身を呼び出すプログラムを書いてみる #include <stdio.h> #include <stdlib.h> int main (int argc,char *argv[]) { int i = 0; char command[100]; if ( argc < 2 ) exit(0); i = atoi(*++argv); if (</stdlib.h></stdio.h>…

入力ストリームへ一文字だけもどせるungetc関数

C K&R

K&R本 7.8.3ungetcを使うとgetchar等で取得した文字を一つだけ戻すことができます。ためしに二つ進んで一つ戻す処理を書いてみます。 #include <stdio.h> int main (void) { int c; int i = 0; while( (c = getchar()) != EOF ) { printf("%c",c); if ( (i = (i+1) % </stdio.h>…

文字列をコピーしてポインタを返す_strdup関数

C

値を単なるポインタで渡すと元の値を変更したときに、書き換わってしまうのでデータを保存しておくためには新しく割り当てたポインタを保持する必要がある。それをやってくれるのが_strdup関数 #include <stdio.h> #include <string.h> int main (void) { char *p; char str[] =</string.h></stdio.h>…

ファイルを比べて違ってる最初の行を表示

C K&R

K&R本 演習7-6 二つのファイルを比べて、違っている最初の行を印字するプログラムを書け。 #include <stdio.h> #include <string.h> #include <stdlib.h> char *getline (FILE *fp) { char str[100]; char *p = NULL; size_t len = 0; size_t lentotal = 0; while ( fgets(str,sizeof(str)</stdlib.h></string.h></stdio.h>…

fopenとfopen_s

C

VC2008の警告レベル最大だとfopenは警告が出る。fopen_sの方を使えと。ということでそれぞれの書き方を以下に示す。fopenの場合 FILE *fp; if ( (fp = fopen("foo.txt","r")) == NULL ) { // エラー処理 } fopen_sの場合 FILE *fp; errno_t error; if ( (err…

共用体に先頭要素が共通している構造体が含まれている場合

C K&R

K&R本 付録A8.3 共用体の利用を簡単にするのには、一つ特別な方法が用意されている。ある共用体に、先頭のメンバー並びが共通しているいくつかの構造体が含まれていて、しかも共用体がいまそれらの構造体の一つを保持しているときには、含まれている任意の構…