ライブラリ関数strncmpを使って文字列の一部を比較したく、そのときに最後の空白文字も比較の対象にしたいのですが
何か方法はありますでしょうか。
具体的には
このとき、bufの中身は入力によって変えたい("pencil"を"pencil_a"、または全く別の単語にしたときなどにも対応させたい)
と考えており、できればbufの方はいじらずにbaseの方をいじって、どうにかしたいと考えています。
そのうえでstrncmpでbaseとbufを比較したいのですが何か良い方法はあるでしょうか。
strncmp関数を応用して使いたいのですが
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: strncmp関数を応用して使いたいのですが
base の文字列長を表示したり、bufをそれぞれ空白で分解して表示するプログラムは組めますか?
ヒント: 分解するために別の配列は用意したほうが簡単になるでしょう。
ヒント: 分解するために別の配列は用意したほうが簡単になるでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: strncmp関数を応用して使いたいのですが
今のコードの最大の問題点は
sizeof(base) は、つまるところ sizeof(char *) ですから、
先頭からたかだか4バイトしか比較しないように見えます(ポインターのサイズが4バイトの環境では)。
sizeof(base) 以外の方法を考える必要があるのではないかと思います。
第3引数が sizeof(base) であることのような気がします。
sizeof(base) は、つまるところ sizeof(char *) ですから、
先頭からたかだか4バイトしか比較しないように見えます(ポインターのサイズが4バイトの環境では)。
sizeof(base) 以外の方法を考える必要があるのではないかと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: strncmp関数を応用して使いたいのですが
試しに、こんなコードを実行してみると、第3引数がsizeof(base)であるときに
strncmp()がどこまで比較対象としているかがわかるかもしれません。
空白も文字であることには変わりありませんから、第3引数を適切に設定すれば何も問題ないと思います。
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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。