strlen

size_t strlen( const char *str )

strの文字数を返す。
終端のNULLは含まれない。

n = strlen( "abcde" );

nの値は5になる
C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

strncat

char *strncat( char *dest, const char *source, size_t count )

文字列destの後ろに文字列sourceの先頭count文字を連結する

strncat( s1, s2, 10 );

文字列s1の後ろに文字列s2の先頭10文字をつなぐ
C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

strncmp

int strncmp( const char *str1, const char *str2, size_t count )

先頭count文字だけ文字列str1と文字列str2を比較する。

戻り値は、string1 と string2 の部分文字列の関係を示す。
戻り値説明
< 0string1 の部分文字列は string2 の部分文字列より小さい
0string1 の部分文字列は string2 の部分文字列と同じ
> 0string1 の部分文字列は string2 の部分文字列より大きい



if ( strncmp( str, "abc", 3 ) == 0 ) {
 ・・・
}


もし文字列strの先頭3文字が"abc"なら処理をする
C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

strncpy

char *strncpy( char *dest, const char *source, size_t count )

文字列destに文字列sourceの先頭count文字をコピーする
countがsourceの長さ以下の場合は、
コピーされた文字列の終端にnull文字が追加されない。
countがsourceよりも長い場合は、
countの文字数になるまで、コピー先文字列にnull文字が埋め込まれる。

strncpy( s1, s2, 10 );

文字配列s1に文字列s2の先頭10文字をコピーする
C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

strstr

char *strstr( const char *str, const char *key )

文字列strの先頭から文字列keyを探し、その位置を返す。
見つからない時はNULLを返す。


char *p;
char s[] = "strstr test";
p = strchr( s, "te" );
puts( p );


ポインタpに文字列s内の文字列"te"のあるアドレスが返る。

出力結果
test
C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

strtok

char *strtok( char *str, const char *delim )

文字列delimの中の各文字を分離記号として、
文字列strの中からトークンを切り出す。
2回目以降はstrにNULLを指定してstrtokを呼び出す。
戻り値がNULLになるまでstrtokを実行すると、
全てのトークンを得る事ができる。


#include <stdio.h>
#include <string.h>

void main()
{
 char s[] = "123,456.789 012/,.:345:678";
 const char delim[] = "/: ,.";
 char *p;

 p = strtok( s, delim );
 printf( "%s\n", p );
 while ( ( p = strtok( NULL, delim ) ) != NULL )
  printf( "%s\n", p );
}


実行結果

123
456
789
012
345
678

C > 標準関数 > 文字列処理関数 | comments (0) | trackbacks (0)

time

time_t time( time_t *timeptr )

西暦1970年1月1日から何秒経ったかを秒数で返す。


#include <stdio.h>
#include <time.h>

void main()
{
 printf( "%ld\n", time( NULL ) );
}


・調べた秒数は戻り値で取得すればよい。
・引数には変数のアドレスではなくNULLを指定する。
・このデータはctime関数を使って読める形にする。
C > 標準関数 > 時間処理 | comments (0) | trackbacks (0)

ctime

char *ctime( time_t *time )

システムクロック時間を人間が理解可能な時間文字列に変換する。
ctimeとはconvert timeの略かと思われる。
意味合い的には「localtime+asctime」という働きをする。


#include <stdio.h>
#include <time.h>

void main()
{
 time_t nowtime;
 time( &nowtime );
 printf( "%s", ctime( &nowtime ) );
}


実行結果

Tue Oct 24 12:12:37 2006


'\n'と'\0'が文字列の最後に付加されます。
C > 標準関数 > 時間処理 | comments (0) | trackbacks (0)

feof

int feof( FILE *fp )

ファイルfpがファイルエンドなら非0を返す。


while ( !feof( fp ) ) {
 c = getc( fp );
 ・・・
}


ファイルfpがファイルエンドでない間、処理を続ける。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

ファイル入出力主要関数一覧

FILE *fi;
FILE *fo;
int a, c;
char str[256];
とした場合

putc1文字書き出しputc( c, fo )
fputc同上fputc( c, fo )
getc1文字読み込みc = getc( fi )
fgetc同上c = fgetc( fi )
fputs1行書き出しfputs( str, fo )
fgets1行読み込みfgets( str, 256, fi )
fprintf書式付き書き出しfprintf( fo, "%d\n", a );
fscanf書式付き読み込みfscanf( fi, "%d", &a );

fgetsの場合、文字列の最後に"\0"が付加されなければならないので
上記の例では読み込めるのは255文字までとなる。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

コマンドライン引数の取得

コマンドラインからの引数を確認するプログラム

#include <stdio.h>

void main( int argc, char *argv[] )
{
 printf( "argc:%d\n", argc );
 for ( int i = 0; i < argc; i++ )
  printf( "argv[ %d ]:%s\n", i, argv[ i ] );
}


以下のような内容の起動用バッチも作成しておきます。

適当.exe 第1引数 第2引数
pause


実行結果

argc:3
argv[ 0 ]:適当.exe
argv[ 1 ]:第1引数
argv[ 2 ]:第2引数


argcはコマンドラインからmain関数へ渡されたすべての引数の数です。
argv[0]はコマンド名そのものを示しています。
"適当.exe"から見た場合、第1引数はargv[1]、第2引数はargv[2]に入ります。

これを利用してファイル入出力処理をコマンドラインから行う事ができます。

ファイルから1文字ずつリードしてディスプレイに表示していくプログラム

#include <stdio.h>
#include <stdlib.h>

void main( int argc, char *argv[] )
{
 FILE *fp;
 int c;

 if ( argc != 2 ) {
  printf( "引数の数が違います\n" );
  exit( 1 );
 }
 if ( ( fp = fopen( argv[1], "r" ) ) == NULL ) {
  printf( "入力ファイルがオープンできません\n" );
  exit( 1 );
 }

 while ( ( c = getc( fp ) ) != EOF )
  putchar( c );

 fclose( fp );
}

C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

fclose

int fclose( FILE* fp )

正常の時は0、エラーの場合EOFが返される。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

fopen

FILE* fopen( char* filename, char* openmode )

ファイルが正しくオープンされると、ファイルポインタが返される。
エラーの時はNULLが返される。


FILE *fp;
fp = fopen( "sample.txt", "r" );
・・・
fclose( fp );


fopenのオープンモード
"r"既存ファイルを読み込み。ファイルがないとエラーになる。
"w"既存ファイルに新規書き込み。元の記録内容は消去される。ファイルがない場合は新規作成される。
"a"既存ファイルに追加書き込み。ファイルがない場合は新規作成される。
"r+"既存ファイルに読み込みと書き込み。ファイルがないとエラーになる。
"w+"既存ファイルに新規書き込み。読み込みも可能。ファイルがない場合は新規作成される。
"a+"既存ファイルに追加書き込み。読み込みは先頭から。ファイルがない場合は新規作成される。
"rb"バイナリファイルの読み込み。
"wb"バイナリファイルの新規書き込み。
"ab"バイナリファイルの追加書き込み。
C > 標準関数 > ファイル入出力関数 | comments (0) | trackbacks (0)

exit

任意の場所で処理を終了させる時に使う。
exit(0);
という記述に出会うと、そこで処理を終了し、OSに処理を戻す。
この時OSに整数値(終了コード)を返すことができる。
規定はされていないが、一般に正常終了なら0、
異常終了なら1以上という値が用いられている。
C > 標準関数 > 一般ユーティリティ | comments (0) | trackbacks (0)

log10

double log10( double x )

a = log10( b )

bの常用対数をaに入れる
C > 標準関数 > 数学関数 | comments (0) | trackbacks (0)