ページ 1 / 1
strncmp関数を応用して使いたいのですが
Posted: 2013年1月08日(火) 00:57
by blade
ライブラリ関数strncmpを使って文字列の一部を比較したく、そのときに最後の空白文字も比較の対象にしたいのですが
何か方法はありますでしょうか。
具体的には
コード:
buf[256]="pencil 12345678 53000000 ";
char* base = "pencil ";
strncmp(base, buf, sizeof(base);
このとき、bufの中身は入力によって変えたい("pencil"を"pencil_a"、または全く別の単語にしたときなどにも対応させたい)
と考えており、できればbufの方はいじらずにbaseの方をいじって、どうにかしたいと考えています。
そのうえでstrncmpでbaseとbufを比較したいのですが何か良い方法はあるでしょうか。
Re: strncmp関数を応用して使いたいのですが
Posted: 2013年1月08日(火) 01:19
by softya(ソフト屋)
base の文字列長を表示したり、bufをそれぞれ空白で分解して表示するプログラムは組めますか?
ヒント: 分解するために別の配列は用意したほうが簡単になるでしょう。
Re: strncmp関数を応用して使いたいのですが
Posted: 2013年1月08日(火) 04:59
by box
今のコードの最大の問題点は
blade さんが書きました:
コード:
strncmp(base, buf, sizeof(base));
第3引数が sizeof(base) であることのような気がします。
sizeof(base) は、つまるところ sizeof(char *) ですから、
先頭からたかだか4バイトしか比較しないように見えます(ポインターのサイズが4バイトの環境では)。
sizeof(base) 以外の方法を考える必要があるのではないかと思います。
Re: strncmp関数を応用して使いたいのですが
Posted: 2013年1月08日(火) 05:20
by box
試しに、こんなコードを実行してみると、第3引数がsizeof(base)であるときに
strncmp()がどこまで比較対象としているかがわかるかもしれません。
コード:
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[256]="pencil 12345678 53000000 ";
char *base;
base = "pencil ";
printf("%d\n", strncmp(base, buf, sizeof(base)));
base = "pencal ";
printf("%d\n", strncmp(base, buf, sizeof(base)));
base = "penbil ";
printf("%d\n", strncmp(base, buf, sizeof(base)));
return 0;
}
空白も文字であることには変わりありませんから、第3引数を適切に設定すれば何も問題ないと思います。