正确地声明和传递不同大小的char数组

时间:2013-03-10 09:22:57

标签: iphone objective-c

我喜欢定义一个接收可变大小的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 

分别

如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

因为您声明为char *的参数,但传递了const char []。这是一个潜在的风险。你应该做出以下改变。我测试时没有警告。

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

答案 1 :(得分:1)

C中的限定符首先应用于左侧的关键字,然后再回到右侧。 const char arr[]不是对char数组的常量引用,它始终是char类型。但是,当你将它传递给一个带有指向char的指针的方法时,你会丢失该类型的常量,并且会收到警告。 (Hooray对于晦涩难懂的C东西!)