0

可変サイズのchar配列を受け取るメソッドを定義するのが好きです。

これは私の現在の定義です:

+(int) findStartIndex: (NSData*)buffer  searchPattern: (char*) searchPattern;

そして、これは私がそれを呼ぶところです:

  const char a[] = {'a','b','c'};
  startIndex = [self findStartIndex:buffer  searchPattern: a];

そしてこのように

  const char b[] = {'1','2'};
  startIndex = [self findStartIndex:buffer  searchPattern: b];

しかし、私はコンパイラの警告を受け取り続けます:

Sending 'const char[3]' to parameter of type 'char *' discards qualifiers 

Sending 'const char[2]' to parameter of type 'char *' discards qualifiers 

それぞれ。

これを正しく行う方法は?

4

2 に答える 2

2

これは、char *として宣言したパラメーターですが、constchar[]が渡されるためです。潜在的なリスクがあります。次の変更が必要です。テストしても警告はありません。

+(int) findStartIndex: (NSData*)buffer  searchPattern: (const char*) searchPattern
于 2013-03-10T09:30:46.163 に答える
1

Cの修飾子は、最初に左側のキーワードに適用され、次に右側にフォールバックされます。 const char arr[]はchar配列への定数参照ではなく、常にchar型です。ただし、charへのポインタを受け取るメソッドに渡すと、型の定数が失われ、警告が表示されます。(あいまいなCのもののためにやった!)

于 2013-03-10T09:35:26.017 に答える