2012-11-27 108 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)) { }