Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
How can I return a character array from a function in C?

is that even possible? Let's say that I want to return an array of two characters

char arr[2];
arr[0] = 'c';
arr[1] = 'a';

from a function. What type do I even use for the function? Is my only choice to use pointers and void the function? So far I've tried having a char* function or a char[]. Apparently you can only have functions of char(*[]). The only reason I want to avoid using pointers is the fact that the function has to end when it encounters a "return something;" because the value of "something" is a character array (not a string!) that might change size depending on the values I pass into the function through the main function. Thanks to anyone who responds in advance.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

You've got several options:

1) Allocate your array on the heap using malloc(), and return a pointer to it. You'll also need to keep track of the length yourself:

void give_me_some_chars(char **arr, size_t *arr_len)
{
    /* This function knows the array will be of length 2 */
    char *result = malloc(2);

    if (result) {
        result[0] = 'c';
        result[1] = 'a';
    }

    /* Set output parameters */
    *arr = result;
    *arr_len = 2;
}

void test(void)
{
    char *ar;
    size_t ar_len;
    int i;

    give_me_some_chars(&ar, &ar_len);

    if (ar) {
        printf("Array:\n");
        for (i=0; i<ar_len; i++) {
            printf(" [%d] = %c\n", i, ar[i]);
        }
        free(ar);
    }
}

2) Allocate space for the array on the stack of the caller, and let the called function populate it:

#define ARRAY_LEN(x)    (sizeof(x) / sizeof(x[0]))

/* Returns the number of items populated, or -1 if not enough space */
int give_me_some_chars(char *arr, int arr_len)
{
    if (arr_len < 2)
        return -1;

    arr[0] = 'c';
    arr[1] = 'a';

    return 2;
}

void test(void)
{
    char ar[2];
    int num_items;

    num_items = give_me_some_chars(ar, ARRAY_LEN(ar));

    printf("Array:\n");
    for (i=0; i<num_items; i++) {
        printf(" [%d] = %c\n", i, ar[i]);
    }
}

DO NOT TRY TO DO THIS

char* bad_bad_bad_bad(void)
{
    char result[2];      /* This is allocated on the stack of this function
                            and is no longer valid after this function returns */

    result[0] = 'c';
    result[1] = 'a';

    return result;    /* BAD! */
}

void test(void)
{
    char *arr = bad_bad_bad_bad();

    /* arr is an invalid pointer! */
}
over 4 years ago · Santiago Trujillo Denunciar

0

You can return a pointer for the array from a function, however you can't return pointers to local arrays, the reference will be lost.

So you have 3 options:

  1. Use a global variable:

     char arr[2];
    
     char * my_func(void){
         arr[0] = 'c';
         arr[1] = 'a';
         return arr;
     }
    
  2. Use dynamic allocation (the caller will have the responsibility to free the pointer after using it; make that clear in your documentation)

     char * my_func(void){
    
         char *arr;    
         arr = malloc(2);
         arr[0] = 'c';
         arr[1] = 'a';
    
         return arr;
     }
    
  3. Make the caller allocate the array and use it as a reference (my recommendation)

     void my_func(char * arr){
    
         arr[0] = 'c';
         arr[1] = 'a';
     }
    

If you really need the function to return the array, you can return the same reference as:

char * my_func(char * arr){
    arr[0] = 'c';
    arr[1] = 'a';
    return arr;
}
over 4 years ago · Santiago Trujillo Denunciar

0

Since you have a predetermined size of you array you can in-fact return the array if you wrap it with a struct:

struct wrap
{
    char a[2] ;
} ;

struct wrap Get( void )
{
    struct wrap w = { 0 } ;

    w.a[0] = 'c';
    w.a[1] = 'a';

return w ;
}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda