strncmp関数を応用して使いたいのですが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
blade

strncmp関数を応用して使いたいのですが

#1

投稿記事 by blade » 13年前

ライブラリ関数strncmpを使って文字列の一部を比較したく、そのときに最後の空白文字も比較の対象にしたいのですが
何か方法はありますでしょうか。
具体的には

コード:

buf[256]="pencil  12345678  53000000  ";
char* base = "pencil ";

strncmp(base, buf, sizeof(base);
このとき、bufの中身は入力によって変えたい("pencil"を"pencil_a"、または全く別の単語にしたときなどにも対応させたい)
と考えており、できればbufの方はいじらずにbaseの方をいじって、どうにかしたいと考えています。

そのうえでstrncmpでbaseとbufを比較したいのですが何か良い方法はあるでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: strncmp関数を応用して使いたいのですが

#2

投稿記事 by softya(ソフト屋) » 13年前

base の文字列長を表示したり、bufをそれぞれ空白で分解して表示するプログラムは組めますか?
ヒント: 分解するために別の配列は用意したほうが簡単になるでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

box
記事: 2002
登録日時: 15年前

Re: strncmp関数を応用して使いたいのですが

#3

投稿記事 by box » 13年前

今のコードの最大の問題点は
blade さんが書きました:

コード:

    strncmp(base, buf, sizeof(base));
第3引数が sizeof(base) であることのような気がします。
sizeof(base) は、つまるところ sizeof(char *) ですから、
先頭からたかだか4バイトしか比較しないように見えます(ポインターのサイズが4バイトの環境では)。
sizeof(base) 以外の方法を考える必要があるのではないかと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 15年前

Re: strncmp関数を応用して使いたいのですが

#4

投稿記事 by box » 13年前

試しに、こんなコードを実行してみると、第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引数を適切に設定すれば何も問題ないと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る