文字列の比較について

[戻る]
ねこまんじゅう 2006/05/23(火) 22:08:35
環境 VC2005 Win32 WindowsXP SP2

宜しくお願いいたします。


6文字格納されている文字列A と、
6文字以上格納されている文字列B があるとします。
文字列Bの先頭(1文字目)から6文字目までが 文字列Aと
まったく一緒かどうか調べたいのです。

下のソースコードではコンパイルは通るのですが、
実行と同時に強制終了します。
強制終了する理由がよくわかりません。

解決策、または代案などがありましたら、ご教授ください。。。。


#include <stdio.h>
#include <string.h>

int main(){

    char tokun[] = "rarara";           // 文字列A
    char Buf[] = "rararaPrograming";   // 文字列B



    // Bufの先頭6文字が rarara ならばOKを表示する

    if( strcmp((const char *)tokun[0], (const char *)Buf[0]) == 0 &&
        strcmp((const char *)tokun[1], (const char *)Buf[1]) == 0 &&
        strcmp((const char *)tokun[2], (const char *)Buf[2]) == 0 &&
        strcmp((const char *)tokun[3], (const char *)Buf[3]) == 0 &&
        strcmp((const char *)tokun[4], (const char *)Buf[4]) == 0 &&
        strcmp((const char *)tokun[5], (const char *)Buf[5]) == 0  )
    {
        printf("OK");
    }

    return 0;
}

シャノン 2006/05/23(火) 22:42:39
> 強制終了する理由がよくわかりません。

引数が不正だからです。
strcmp は「文字列と文字列を比較する関数」です。それを今回は「文字と文字の比較」
に使おうとしています。
そして、強引にキャストを行うことにより、「1文字の文字コード」を「文字列のアド
レス」と解釈させようとしていますが、そんなアドレスは不正なので、強制終了されま
す。

strncmp を使ってください。

Sugi 2006/05/23(火) 22:46:13
文字をアドレス変換してるのでアクセスエラーだとおもいます

引数を(const char *)&tokun[0]にします

ふつうなら文字数調べてstrncmp をするかまたは 
文字数をカットして、strcmpしたらよいかと

Buf[6] = (char)'\0';
if(!strcmp(tokun,Buf)){
  printf("OK");
}

ねこまんじゅう 2006/05/23(火) 23:48:19
[[解決]]
>> シャノンさま Sugiさま

なるほど・・・大変よくわかりました。
お2人の意見を踏まえてプログラムを組んで見たところ、
うまく行きました。

どうもありがとうございました。

古いスレッドには追加発言できません。