C:接收指向指针的指针以便分配外部指针的函数

C:接收指向指针的指针以便分配外部指针的函数,c,pointers,C,Pointers,我如何做以下工作?这个想法是让函数分配一个外部指针,这样我就可以在另一个程序中使用这个概念,但我不能这样做,因为gcc一直告诉我参数来自不兼容的指针类型。。。应该很简单,但我没看到 #include <stdio.h> #include <stdlib.h> #include <string.h> int allocMyPtr(char *textToCopy, char **returnPtr) { char *ptr=NULL; int

我如何做以下工作?这个想法是让函数分配一个外部指针,这样我就可以在另一个程序中使用这个概念,但我不能这样做,因为gcc一直告诉我参数来自不兼容的指针类型。。。应该很简单,但我没看到

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int allocMyPtr(char *textToCopy, char **returnPtr) {
    char *ptr=NULL;
    int size=strlen(textToCopy)+1;
    int count;

    ptr=malloc(sizeof(char)*(size));
    if(NULL!=ptr) {
        for(count=0;count<size;count++) {
            ptr[count]=textToCopy[count];
        }
        *returnPtr = ptr;
        return 1;
    } else {
        return 0;
    }
}

int main(void) {
    char text[]="Hello World\n";
    char *string;

    if(allocMyPtr(text,string)) {
        strcpy(string,text);
        printf(string);
    } else {
        printf("out of memory\n");
        return EXIT_FAILURE;
   }
   free(string);
   return EXIT_SUCCESS;
}
#包括
#包括
#包括
int allocMyPtr(字符*textToCopy,字符**returnPtr){
char*ptr=NULL;
int size=strlen(textToCopy)+1;
整数计数;
ptr=malloc(sizeof(char)*(size));
如果(NULL!=ptr){

对于(count=0;count这几乎是正确的,但由于函数需要指向指针的指针,因此必须使用运算符的地址将指针的地址传递给函数:

allocMyPtr(text, &string)

这几乎是正确的,但由于函数需要指向指针的指针,因此必须使用运算符的地址将指针的地址传递给函数:

allocMyPtr(text, &string)

使用
&string
来解决问题。与此输入参数相关的类型是
char**
而不是
char*

if(allocMyPtr(text,&string)) {
关于您的源代码,请注意:

allocMyPtr()
函数已经将文本复制到字符串

那你为什么要用strcpy复制呢?它没用

strcpy(string,text); // this useless

使用
&string
来解决问题。与此输入参数相关的类型是
char**
而不是
char*

if(allocMyPtr(text,&string)) {
关于您的源代码,请注意:

allocMyPtr()
函数已经将文本复制到字符串

那你为什么要用strcpy复制呢?它没用

strcpy(string,text); // this useless

您正在使用
allocMyPtr()
中的
pass by value
传递
string
您应该使用
pass by address
以便指针应该匹配,否则编译器会告诉您

不兼容的类型
char*
char**

这样做:

if(allocMyPtr(text,&string)) { }

您正在使用
allocMyPtr()
中的
pass by value
传递
string
您应该使用
pass by address
以便指针应该匹配,否则编译器会告诉您

不兼容的类型
char*
char**

这样做:

if(allocMyPtr(text,&string)) { }

忘记将“文本”复制到“字符串”的主行,这是不必要的忘记将“文本”复制到“字符串”的主行,这是不必要的