传递char []作为c中的参考

时间:2016-09-03 20:10:05

标签: c arrays string pointers reference

我正在尝试将char []传递给函数并将其变异。以下代码为我的测试用例编译并按预期工作,但是我得到了一些编译器警告,我无法弄清楚如何解决它们。

代码:     #包括     #include

#define MAX_STRING_SIZE 100

void strOp(char **someString) {
  snprintf( someString, sizeof(someString), "HELLO");
}

int main() {
  char myString[MAX_STRING_SIZE];
  strOp(&myString);
  printf("%s\n", myString);
  return 0;
}

警告:

  echoecho.c: In function ‘strOp’:
  echoecho.c:18:3: warning: passing argument 1 of ‘snprintf’ from incompatible pointer type [enabled by default]
     snprintf( someString, sizeof(someString), "HELLO");
     ^
  In file included from echoecho.c:12:0:
  /usr/include/stdio.h:386:12: note: expected ‘char * __restrict__’ but argument is of type ‘char **’
   extern int snprintf (char *__restrict __s, size_t __maxlen,
              ^
  echoecho.c: In function ‘main’:
  echoecho.c:23:3: warning: passing argument 1 of ‘strOp’ from incompatible pointer type [enabled by default]
     strOp(&myString);
     ^
  echoecho.c:17:6: note: expected ‘char **’ but argument is of type ‘char (*)[100]’
   void strOp(char **someString) {

我尝试了一些使用*,* []和**的组合,并找到了一些可行但但始终有警告的组合。有任何想法如何清理它?

2 个答案:

答案 0 :(得分:3)

将指针传递给char

尝试

#include<cstdlib>
#include<string.h>
#define MAX_STRING_SIZE 100

void strOp(char *someString) {
snprintf( someString,MAX_STRING_SIZE, "HELLO");
}

 int main() {
 char myString[MAX_STRING_SIZE];
 strOp(myString);
 printf("%s\n", myString);
 return 0;  
 }

答案 1 :(得分:1)

在您的情况下,正确的方法是:

#define MAX_STRING_SIZE 100

void strOp(char *someString) {
  /* ... */
}

int main() {
  char myString[MAX_STRING_SIZE];
  strOp(myString);
  printf("%s\n", myString);
  return 0;
}

使用数组时,通常不需要在它们上使用指针。

但是有一种方法可以做到:

#include #include

#define MAX_STRING_SIZE 100

void strOp(char (*someString)[MAX_STRING_SIZE]) {
  /* ... */
}

int main() {
  char myString[MAX_STRING_SIZE];
  strOp(&myString);
  printf("%s\n", myString);
  return 0;
}

someString是指向MAX_STRING_SIZE char数组的指针。