我正在尝试将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) {
我尝试了一些使用*,* []和**的组合,并找到了一些可行但但始终有警告的组合。有任何想法如何清理它?
答案 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
数组的指针。