C:接收指针指针的函数,以便它可以分配外部指针

时间:2012-11-27 12:58:02

标签: c pointers

如何进行以下工作?我的想法是让函数分配一个外部指针,这样我就可以在另一个程序中使用这个概念,但是我不能这样做,因为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;
}

3 个答案:

答案 0 :(得分:2)

这几乎是正确的,但是当你的函数需要一个指向指针的指针时,你必须使用address-of运算符将指针的地址传递给函数:

allocMyPtr(text, &string)

答案 1 :(得分:1)

使用&string来修复您的问题,与此输入参数相关的类型为char **而不是char *

if(allocMyPtr(text,&string)) {

关于源代码的评论:

allocMyPtr()函数已经从文本到字符串进行复制。

那么为什么你用strcpy制作副本agian。它没用了

strcpy(string,text); // this useless

答案 2 :(得分:1)

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

char *

不兼容的char **类型

这样做:

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