2015-07-23 1 views
0

Désolé pour le titre cryptique, j'ai cherché une réponse, mais je ne pouvais pas en trouver un. Quoi qu'il en soit, j'essaie de passer un tableau char dans une fonction et de modifier le pointeur à l'intérieur du tableau. Voici un exemple de ce que je veux dire en C++:Comment imiter C++ "passer tableau (pointeur) par référence" dans C?

#include "stdio.h" 
#include "string.h" 

void fill(char*& destination, const char* const input, int size) 
{ 
    memcpy(destination, input, size); 
    destination += size; 
} 

void inner(const char* const string1, int size1) 
{ 
    const int size2 = 8; 
    char string2[size2] = "World!\n"; 

    char output[20]; 
    char* outputWriter = output; 

    fill(outputWriter, string1, size1); 
    fill(outputWriter, string2, size2); 

    printf(output); 
} 

int main() 
{ 
    inner("Hello ", 6); 
} 

qui sort Hello World!

Et voici ma tentative dans C:

#include "stdio.h" 
#include "string.h" 

void fill(char** const destination, const char* const input, int size) 
{ 
    memcpy(destination, input, size); 
    *destination += size; 
} 

void inner(const char* const string1, int size1) 
{ 
    const int size2 = 8; 
    char string2[size2] = "World!\n"; 

    char output[20]; 
    char (*outputWriter)[20] = &output; 

    fill((char**)outputWriter, string1, size1); 
    fill((char**)outputWriter, string2, size2); 

    printf(output); 
} 

int main() 
{ 
    inner("Hello ", 6); 
} 

qui sort _orld! et la coulée n'est pas très joli.

Quelle est la manière correcte de passer un tel pointeur à un tableau à une fonction afin de pouvoir le modifier comme le fait le code C++?

+2

'printf (sortie)' est considéré comme mauvais style. use 'puts (output);' –

+0

pointeur vers le pointeur – bolov

+4

En C++, vous ne passez pas un * tableau * par référence (C++ a une syntaxe pour cela). Vous passez un * pointeur * par référence. Votre titre ne correspond pas à la question. – juanchopanza

Répondre

6

C'est ce que vous recherchez:

#include "stdio.h" 
#include "string.h" 

void fill(char** destination, const char* const input, int size) 
{ 
    memcpy(*destination, input, size); 
    *destination += size; 
} 

void inner(const char* const string1, int size1) 
{ 
    const int size2 = 8; 
    char string2[size2] = "World!\n"; 

    char output[20]; 
    char* ptr = output; 

    fill(&ptr, string1, size1); 
    fill(&ptr, string2, size2); 

    puts(output); 
} 

int main() 
{ 
    inner("Hello ", 6); 
} 
+0

Merci beaucoup. Je ne sais pas pourquoi je n'y ai pas pensé. :) – Jaciq