小技、覚えておきたいこと
ーーーー&&演算子についてーーーー
&&演算子では、直前に実行した式が偽なら、後の式は実行しない性質があります。
次のマクロは、&&演算子の性質を利用したSWAPマクロです。
#define SWAP(a,b) ( (a != b) && (a += b,b = a - b,a -= b) )
(苦C)より
(a != b)が偽になると、その後の処理が無効化される
ーーーー文字列を任意の位置からコピーするーーーーーーー
strncpy で部分文字列を取り出す
コピー元の文字列を渡すときに、文字列の先頭でなく +pos して渡します。
strncpy は '\0' を付加しないので、取り出し後に自分で NULLストップする必要があります。
#include <stdio.h> #include <string.h> main() { char str[] = "01234567890"; char t[64]; strncpy( t, str+3, 5 ); //strの先頭+3の位置から5文字をtにコピー t[5] = '\0'; //取り出した文字数分の最後に'\0'を入れる printf( "#%s#\n", t ); }
実行結果
#34567#