カテゴリ 「 C のメモ 」 の記事一覧
2012年11月17日

関数のメモ


たまにしか使わないC言語の覚書。

標準入出力

int getchar (stdio.h) : 標準入力から1文字読み込む。正常時には読み込んだ文字を返し、それ以外はEOFを返す。

int putchar(int ch) (stdio.h) : 標準出力に引数の文字を出力する。正常時には引数のch, そうでなければEOF。

char *gets(char *buf) (stdio.h) : 文字列の入力。文字列の入力は、改行またはEOFが入力されるまで行う。最後に入力された改行又はEOFは \0 に変換される。

int puts(char *buf) (stdio.h) : 文字列の出力。引数で渡されたbufの文字列を出力。文字列の最後の\0は改行に変換される。正常時には非負の値を返し、そうでなければEOFを返す。

int scanf(char *format, ...) (stdio.h) : 標準入力から、引数format に指定された書式にしたがって読み込む。書式には %d, %x, %f, %c, %s などがしていできる。正常時には入力データの個数が、そうでなければEOFが返される。

int printf(char *format, ...) (stdio.h) : 標準出力に文字列を出力する。正常終了なら出力文字数を、そうでなければ負の値を返す。

文字列操作

size_t strlen(char *string) (string.h) : 引数の文字列の文字数を返す。ただし\0は除く

char *strcpy(char *string1, char * string2) (string.h) : 引数2の文字列を、終端の\0も含めて引数1の領域にコピーする。string1はコピー後の文字数が格納できるだけの領域をもっている必要がある。

char *strncpy(char *string1, char *string2, size_t length) (string.h) : 引数2の文字列を引数1の指す領域に指定された文字数分だけコピーする。文字列2の文字数が指定された文字数にみたない場合は\0でパディングされる。string1はコピー後の文字数が格納できるだけの領域をもっている必要がある。

char *strcat(char *string1, char *string2) (string.h) : 引数2の指す文字列を引数1の指す文字列に結合する。引数1の文字列に含まれる\0は引数2の先頭文字で上書きされる。string1を返す。string1は連結後の文字数が格納できるだけの領域をもっている必要がある。

char *strncat(char *string1, char *string2, size_t length) (string.h) : 引数2の指す文字列を引数1の指す文字列に指定された文字数分連結する。引数2の文字列が指定された文字列にみたなければ、strcatと同じどうさとなる。string1を返す。string1は連結後の文字数が格納できるだけの領域をもっている必要がある。

int strcmp(char *string1, char *string2) (string.h) : 引数1の文字列と引数2の文字列をコード順で比較する。string1 が string2 より前にあるなら負の数。

int strncmp(char *string1, char *string2, size_t length) (string.h) : 指定された文字列分についてstring1, string2 を比較する。

char *strchr(char *string, int ch) (string.h) : string の中からchに指定された文字を検索する。最初に見つかった位置へのポインタを返す。見つからなければNULLを返す。

char *strrchr(char *string, int ch) (string.h) : stringの指す文字列の中からchに指定された文字を検索する。検索は文字列の末尾から先頭へ向かって行われる。

ファイル操作

FILE *fopen(char *filename, char *mode) (stdio.h) : ファイルを開く。mode は a, r, w に加えて +:更新モード, b:バイナリモード を付加できる。ファイルがオープンできなければNULLを返す。

int fclose(FILE *fp) (stdio.h) : ファイルのクローズ。正常にクローズできれば0, そうでなければEOFを返す。

int fgetc(FILE *fp) (stdio.h) : 1文字読み込む。終端の文字列を読み込んだ場合、エラーの場合にはEOFをかえす。

int fputc(int ch, FILE *fp) (stdio.h) : 引数fpが示すファイルにchを出力する。正常終了時にはch, そうでなければEOFを返す。

int *fgets(char *string, int length, FILE *fp) (stdio.h) : ファイルから length-1 文字分読み込む。文字列の終端には\0を付加する。正常時には引数string, エラー時にはnullを返す。

int fputs(char *string, FILE *fp) (stdio.h) : 正常時には非負の値、エラー時にはeofを返す。

int fscanf(FILE *fp, char *format, ...) (stdio.h) : ファイルからの書式付き入力。正常時には入力データの個数、エラー時にはEOFを返す。

int fprintf(FILE *fp, char *format, ...) (stdio.h) : ファイルに書き込む。正常時には文字数、エラー時には負の数を返す。

その他

int atoi(char *string) (stdlib.h) : 引数の文字(先頭文字)を整数に変換する。

int isdigit(int ch) : 引数に指定された文字が10進数字(0,...,9)かどうかを判定する。10進数字の場合は0以外の値、そうでなければ0。

void *calloc(size_t count, size_t size) (stdlib.h) : 要素のサイズが指定されたサイズになる用紙を指定された個数だけ格納できるメモリ領域を確保する。確保されたメモリ領域は0で初期化されている。成功すれば割り当てたメモリへのポインタ、そうでなければNULLが返される。(変数ではなく配列のメモリ確保に使用する。)

void *malloc(size_t size) (stdlib.h) : 指定されたバイト数分のメモリを確保する。成功すれば割り当てたメモリへのポインタ、そうでなければNULLが返される。

void free(void *ptr) (stdlib.h) : calloc, malloc で割り当てた領域の開放。


posted by けんじ at 16:48 | Comment(0) | C のメモ
2011年04月09日

標準入力で1文字値を取得する方法


標準入力で1文字値を取得する方法

char c[2];
scanf("%1s", &c);
fflush(stdin); // これがないとgets(xxx)などが勝手に進んでしまう。

c[0] に代入される。

もっとまともな方法があったような気がする。
たまにしかCを書かないので、まったく覚えていない・・・。

参考:
http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
「キジねこ」は4人でやっている会社らしい。ウェブサイトの完成度は高く、とても4人とは思えない。


posted by けんじ at 12:32 | Comment(0) | C のメモ

アロー演算子とドット演算子


アロー演算子は、構造体クラスのメンバを参照するときのドット演算子(.)のポインタ版。

そんなわけで、
構造体変数のポインタからメンバを参照するにはアロー演算子 ->
構造体変数自体からメンバを参照するにはドット演算子
を使う。

ということは・・・次の2つは同じ。

(*pointerObject).memberValue = 1;
pointerObject->memberValue = 1;

読みやすさを考えて、アロー演算子ができたらしい。Syntax Sugar というそうな。


posted by けんじ at 11:59 | Comment(0) | C のメモ

C言語での文字列比較


C言語では文字列(string)の比較が簡単にはできない。それ以前にstringという型がない。 まぁ、string.h を使えばいいのではあるが・・・比較する簡易的な関数を作ってみた。


posted by けんじ at 10:42 | Comment(0) | C のメモ

ライブラリをリンクする方法


コンパイル時に、

socket.obj : error LNK2019: 未解決の外部シンボル __imp__WSACleanup@0 が関数 _main で参照されました。
socket.obj : error LNK2019: 未解決の外部シンボル __imp__WSAStartup@8 が関数 _main で参照されました。

というのが出た。WinSockを使うときは、windock2.h のインクルードと、wsock32.lib のリンクが必要らしい。で、リンクのやり方を調べた。

1.「プロジェクト」→「設定」→「リンク」→オブジェクト/ライブラリモジュールにリンクするライブラリ名を書き込む。
2.「ワークスペース」→「File View」→「ファイルをプロジェクトへ追加」で、ファイルを種類をライブラリにして、ライブラリファイルを選択する。
3.#pragmaで行う。
http://rararahp.cool.ne.jp/vc/vctips/build.htm

#pragma comment(lib, "wsock32.lib") と書いたらコンパイルできた。


posted by けんじ at 10:00 | Comment(0) | C のメモ
2010年11月29日

strchr


strchr

文字列の中の文字を検索する。

引数1: 検索する文字列の先頭のポインタ
引数2: 検索する文字 (char)
戻り値: 発見された文字へのポインタ(見つからなければNULL)


posted by けんじ at 00:01 | Comment(0) | TrackBack(0) | C のメモ
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。