mis08のブログ

ハマったことの備忘録

小技、覚えておきたいこと

ーーーー&&演算子についてーーーー

&&演算子では、直前に実行した式が偽なら、後の式は実行しない性質があります。

次のマクロは、&&演算子の性質を利用した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#