运维开发网

为什么我不能使用param char **将指向char缓冲区的指针传递给函数

运维开发网 https://www.qedev.com 2020-07-05 08:59 出处:网络 作者:运维开发网整理
如果我有一个功能: void myfunction(char** s); 然后我可以像这样传递一个char *: char* s = malloc(100); myfunction(&s); 但我的编译器不允许我这样做: char s[100] = {0}; myfunction(&s); 我认为编译器应该允许指向缓冲区的指针. 你的函数需要一个指向指针的指针(char **).您正尝试将指针传递
如果我有一个功能:

void myfunction(char** s);

然后我可以像这样传递一个char *:

char* s = malloc(100);
myfunction(&s);

但我的编译器不允许我这样做:

char s[100] = {0};
myfunction(&s);

我认为编译器应该允许指向缓冲区的指针.

你的函数需要一个指向指针的指针(char **).您正尝试将指针传递给数组(char(*)[100]).为什么你期望这个“被编译器允许”?数组不是指针.数组和指针是完全不同的对象.指向指针的指针与指向数组的指针不以任何方式兼容.你不能互换使用它们.

如果您希望将基于数组的缓冲区与需要char **的函数一起使用,则必须首先显式创建指向该缓冲区的指针

char s[100] = {0};
char *ps = s;

然后像之前一样传递指向该指针的指针

myfunction(&ps);
0

精彩评论

暂无评论...
验证码 换一张
取 消