将char[]作为c中的引用传递

将char[]作为c中的引用传递,c,arrays,string,pointers,reference,C,Arrays,String,Pointers,Reference,我试图将char[]传递给函数并对其进行变异。下面的代码对我的测试用例进行编译并按预期工作,但我收到一些编译器警告,我不知道如何解决它们 代码: 包括 包括 #define MAX_STRING_SIZE 100 void strOp(char **someString) { snprintf( someString, sizeof(someString), "HELLO"); } int main() { char myString[MAX_STRING_SIZE]; strO

我试图将char[]传递给函数并对其进行变异。下面的代码对我的测试用例进行编译并按预期工作,但我收到一些编译器警告,我不知道如何解决它们

代码: 包括 包括

#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) {
我尝试了使用*、*[]和**的几种组合,并发现了一些有效的组合,但总有一些警告。你知道如何清理这个吗?

将指针传递给char

试一试


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

#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是指向最大字符串大小字符数组的指针。

C严格按值传递。没有例外!并且不能向C.sizeofsomeString中的函数传递数组。sizeofsomeString是指针的大小。您需要单独传递大小。并且您有太多的1颗星,同时从传递的数组中删除了&。您需要将include语句缩进4个空格,这样它们就会显示出来。在C中,当引用数组时,例如在以下行中:strOp&myString;数组的名称降级为数组第一个字节的地址。因此,发布的代码实际上是在向指针传递指针,这是一个错误;“sizeofsomeString”将返回指针的长度,而不是字符串的长度,建议使用:MAX_string_SIZEYou与sizeofsomeString的错误为4或8,但不是您已知的MAX_string_SIZE。.抱歉,继续说下去,但是strlen将不起作用,因为指针指向未初始化的字符串。奇怪的是,这是我认为我首先尝试的,但由于某些原因没有得到突变的结果。。。一定是一些奇怪的打字错误。谢谢
#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;
}