将char[]作为c中的引用传递
我试图将char[]传递给函数并对其进行变异。下面的代码对我的测试用例进行编译并按预期工作,但我收到一些编译器警告,我不知道如何解决它们 代码: 包括 包括将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
#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;
}