Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
¿Cómo puedo devolver una matriz de caracteres de una función en C?

¿Es eso posible? Digamos que quiero devolver una matriz de dos caracteres

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

de una función. ¿Qué tipo debo usar para la función? ¿Es mi única opción usar punteros y anular la función? Hasta ahora he intentado tener una función char* o char[]. Aparentemente, solo puede tener funciones de char(*[]). La única razón por la que quiero evitar el uso de punteros es el hecho de que la función tiene que terminar cuando encuentra un "devolver algo"; porque el valor de "algo" es una matriz de caracteres (¡no una cadena!) que puede cambiar de tamaño según los valores que pase a la función a través de la función principal. Gracias a quien responda de antemano.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Tienes varias opciones:

1) Asigne su matriz en el montón usando malloc() y devuélvale un puntero. También tendrás que hacer un seguimiento de la longitud tú mismo:

 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) Asigne espacio para la matriz en la pila de la persona que llama y deje que la función llamada la complete:

 #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]); } }

NO INTENTE HACER ESTO

 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 Relatório

0

Puede devolver un puntero para la matriz desde una función; sin embargo, no puede devolver punteros a matrices locales, la referencia se perderá.

Así que tienes 3 opciones:

  1. Utilice una variable global:

     char arr[2]; char * my_func(void){ arr[0] = 'c'; arr[1] = 'a'; return arr; }
  2. Use la asignación dinámica (la persona que llama tendrá la responsabilidad de liberar el puntero después de usarlo; aclare eso en su documentación)

     char * my_func(void){ char *arr; arr = malloc(2); arr[0] = 'c'; arr[1] = 'a'; return arr; }
  3. Haga que la persona que llama asigne la matriz y la use como referencia (mi recomendación)

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

Si realmente necesita la función para devolver la matriz, puede devolver la misma referencia que:

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

0

Dado que tiene un tamaño predeterminado de su matriz, de hecho puede devolver la matriz si la envuelve con una estructura:

 struct wrap { char a[2] ; } ; struct wrap Get( void ) { struct wrap w = { 0 } ; wa[0] = 'c'; wa[1] = 'a'; return w ; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda