如果我有一个功能:
void myfunction(char** s);
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样传递一个 char* :
char* s = malloc(100);
myfunction(&s);
Run Code Online (Sandbox Code Playgroud)
但是我的编译器不允许我这样做:
char s[100] = {0};
myfunction(&s);
Run Code Online (Sandbox Code Playgroud)
我认为编译器应该允许指向缓冲区的指针。
您的函数需要一个指向指针( char **)的指针。您正尝试将指针传递给数组( char (*)[100])。为什么你期望这“被编译器允许”?数组不是指针。数组和指针是性质完全不同的对象。指向指针的指针与指向数组的指针在任何方面都不兼容。您不能互换使用它们。
如果您希望将基于数组的缓冲区与期望的函数一起使用char **,则必须首先显式创建指向该缓冲区的指针
char s[100] = {0};
char *ps = s;
Run Code Online (Sandbox Code Playgroud)
然后像之前一样传递一个指向该指针的指针
myfunction(&ps);
Run Code Online (Sandbox Code Playgroud)