文字列の比較について – プログラミング – Home

通知
すべてクリア

[解決済] 文字列の比較について


ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

環境 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;
}


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 強制終了する理由がよくわかりません。

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

strncmp を使ってください。


返信引用
Sugi
 Sugi
(@Sugi)
ゲスト
結合: 19年前
投稿: 20
 

文字をアドレス変換してるのでアクセスエラーだとおもいます

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

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

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


返信引用
ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

>> シャノンさま Sugiさま

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました