2012-11-27 6 views
0

Comment puis-je effectuer les opérations suivantes? L'idée est que la fonction alloue un pointeur externe pour que je puisse utiliser ce concept dans un autre programme, mais je ne peux pas le faire car gcc me dit toujours que l'argument provient d'un type de pointeur incompatible ... Cela devrait être simple, mais je ne le vois pas.C: Fonction qui reçoit un pointeur sur un pointeur de façon à pouvoir en allouer une externe

#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 (texte, & chaîne)' – Roddy

+0

Oubliez la ligne en main qui copie "texte" à "chaîne", c'est inutile – davi5e

Répondre

2

Il est presque correct, mais comme fonction veut un pointeur vers un pointeur, vous devez passer l'adresse du pointeur à la fonction, en utilisant l'adresse de l'opérateur:

allocMyPtr(text, &string) 
+0

Ouais, c'est tout hehe Sooo simple ça fait mal ... – davi5e

1

utilisation &string au lieu de résoudre votre problème du type lié à ce paramètre d'entrée est char ** et non char *

if(allocMyPtr(text,&string)) { 

Juste une remarque concernant votre façon urce code:

La fonction allocMyPtr() effectue déjà une copie de texte en chaîne. Alors pourquoi faire une copie agian avec strcpy? il est inutile

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

Vous passez string en utilisant pass by value dans allocMyPtr() vous devez utiliser pass by adress afin que le pointeur doit correspondre autrement compilateur vous tenir Tellin à propos,

type incompatible char *-char **

faire:

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