質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

7539閲覧

配列比較でmemcmpをしようとして失敗しました

poemt

総合スコア48

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/01/29 02:12

いつもお世話になっております。

c言語の配列について質問です。

受け取るデータが8つあり、0x01,0x02,0x03,0x04,x,0x06,0x07,0x08のように5番目だけが変化する場合があります。
配列として比較したいので、

const int arrayA[4] = {0x01,0x02,0x03,0x04};
const int arrayB[3] = {0x06,0x07,0x08};

int main(void){
arrayTest[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};//受け取るデータ
if( (memcmp(arrayTest, arrayA, 4)) && (memcmp(arreyTest + 5, arrayB, 3)) ){
printf("成功");
}
else{
printf("失敗");
}
return 0;
}

というように変わる部分の前半と後半で比較しようとしたのですが、"失敗"が表示されました。
また使い方の確認のために、前半のif( (memcmp(arrayTest, arrayA, 4)) )だけでやってみましたがやはり"失敗"と返されました。

お聞きしたいことは、
・memcmpの使い方を間違っていると予想したが、どう間違っているかがわからないので原因を知りたい
です。

どうかご教示をよろしくお願いいたします。
また、もしよろしければ、これよりうまい比較方法などを教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

誤っている点が2つあります。

  • まず、memcmpは、等しい時に0を返します。ということで、そのままif(memcmp(...))と書いてしまうと、「等しくなければ」という条件になってしまいます。
  • 次に、memcmpバイト単位で比較します。arrayTest+5int *への操作なのでそのままでいいのですが、memcmpの第3引数には比較するバイト数が必要なので、sizeof(int)をかけて要素数からバイト数に変換しましょう。

投稿2016/01/29 02:19

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poemt

2016/01/29 02:29

回答ありがとうございます。 第3引数をsizeof(int)をかけるようにしたらうまくいきました! ありがとうございます! あとmemcmpの戻り値を考慮していませんでした。これだと仮に成功していても"失敗"になってしまいますね。確認不足でした。 素早い回答ありがとうございました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問