2012-11-27 79 views
0

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

#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; 
} 
+1

'allocMyPtr(text,&string)' – Roddy

+0

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

回答

2

这几乎是正确的,但你的函数想要一个指针的指针,你必须通过函数指针的地址,利用运营商的地址的:

allocMyPtr(text, &string) 
+0

是的,就是它嘿嘿Sooo简单,它伤害... – davi5e

1

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

if(allocMyPtr(text,&string)) { 

只需一句话就这样你urce代码:

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

所以你为什么要复制与strcpy。也没用

strcpy(string,text); // this useless 
1

您正在使用pass by value传递stringallocMyPtr()你应该使用pass by adress使指针应相匹配,否则编译器一直告诉大家一下,

不兼容的类型char *char **

做到这一点:

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