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

时间:2012-08-25 18:05:05

标签: c pointers

如果我有一个功能:

void myfunction(char** s);

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

然后传递指向该指针的指针,就像之前的那样

myfunction(&ps);

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
void myfunction(char* s[]){
    printf("Here: %s",s);
}
int main(){
    char s[100] = {'a'};
    //char s[100] = "myString";
    myfunction(&s);
}

这适用于Linux上不确定的Windows