式は完全なオブジェクトタイプへのポインタである必要がありますが、この状況でこのエラーが発生するのはなぜですか?

スタックエラープロ

これは私の状況を単純化したものです。

header.h

#DEFINE NUMBER 3
extern char reserved[][];

definer.c

char reserved[NUMBER][4] = {"WOW","LOL","K"}

sign.c

#include "header.h"
void theFunctionWithTheError{
    
       if (reserved[1] == "I love stackoverflow"){ /**THE LINE OF THE ERROR*/
       return;
    }
}

sign.cで、「は単語の完全なオブジェクト型へのポインタである必要があります」というエラーが表示されます。reserved

あなたは私に何をするように提案しますか?

ジョナサン・レフラー
  1. エラーメッセージはextern char reserved[][];、コンパイラが配列の一部にアクセスする方法を知るために少なくとも配列の2番目の次元を必要とするため、宣言を有効に使用できないことを示していますextern char reserved[][4];したがって、である必要がありますその宣言により、"I love Stack Overflow"(単語の区切りや大文字の使用に関係なく)配列内のどの文字列とも等しくなるには長すぎることがすぐにわかりますが、それはやや偶然です。

  2. そのような文字列を便利に比較することはできません—を使用する必要がありますstrcmp()値が文字列と一致するかどうかを確認するにはどうすればよいですか?を参照してください。そして、はどのように適切に文字列を比較するのですか?他の多くの可能なSOの質問の中で。

    あなたが持っている:

    if (reserved[1] == "I love stackoverflow")
    

    必要なもの:

    if (strcmp(reserved[1]), "I love Stack Overflow") == 0)
    

    または同等のもの。明示的にその結果を比較strcmp(A, B)して0いずれかを使用してopセットから==!=>=<=>または<あなたが得るだろう結果と一致してからA op B文字列は、実際のビルトインされた場合のタイプCで

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ