Actualmente estoy confundido sobre cómo puedo pasar una matriz de cadenas a una función. He creado una matriz unidimensional. El método que he hecho funciona, pero parece redundante y creo que hay una mejor manera de hacerlo, pero no estoy seguro de cómo hacerlo. Estoy tratando de encontrar una manera en la que pueda pasar los 4 elementos a la función al mismo tiempo.
Aquí está la muestra de mi código.
#include <stdio.h> #include <string.h> #include <ctype.h> void sort(char *,char *,char *, char *);//Function prototype int main() { char *string_database[4]={'\0'}; string_database[0]="Florida"; string_database[1]="Oregon"; string_database[2]="California"; string_database[3]="Georgia"; sort(string_database[0],string_database[1],string_database[2],string_database[3]); return 0; } void sort(char *string1, char *string2, char *string3, char *string4) { printf("The string is= %s\n",string1); printf("The string is= %s\n",string2); printf("The string is= %s\n",string3); printf("The string is= %s\n\n\n",string4); }Gracias de antemano, agradezco cualquier respuesta a mi problema.
Puedes hacerlo así:
void sort(char **, int); int main() { char *string_database[5]={'\0'}; string_database[0]="Florida"; string_database[1]="Oregon"; string_database[2]="California"; string_database[3]="Georgia"; sort(string_database, 4); return 0; } void sort(char **str, int n) { int i = 0; for (i = 0; i < n; i++) printf("The string is= %s\n",str[i]); }#include <stdio.h> #include <string.h> #include <ctype.h> void sort(char *strings[], int n);//Function prototype int main() { char *string_database[4]={'\0'}; string_database[0]="Florida"; string_database[1]="Oregon"; string_database[2]="California"; string_database[3]="Georgia"; sort(string_database, 4); return 0; } void sort(char *strings[], int n) { int i; for (i=0; i<n; i++) { printf("String %d: %s\n", i, strings[i]); } } Por lo general, pasa la longitud de la matriz junto con la propia matriz. Sin embargo, char *strings[] es realmente azúcar sintáctico, por lo que si desea mantener el prototipo de función sin nombres de parámetros, también puede usar char **strings , de modo que el código podría ser así:
#include <stdio.h> #include <string.h> #include <ctype.h> void sort(char **, int);//Function prototype int main() { char *string_database[4]={'\0'}; string_database[0]="Florida"; string_database[1]="Oregon"; string_database[2]="California"; string_database[3]="Georgia"; sort(string_database, 4); return 0; } void sort(char **strings, int n) { int i; for (i=0; i<n; i++) { printf("String %d: %s\n", i, strings[i]); } } Además, como Jite señala a continuación, el uso de una sintaxis como char *strings[] podría engañarlo a usted o a otro lector del código haciéndoles pensar que están tratando con una matriz estática, mientras que esto no es cierto; por lo tanto, debe optar por la sintaxis char **strings más sencilla.
después de leer toda la respuesta dada a su pregunta. Me gustaría decirte una cosa más. también puede imprimir sus cadenas, carácter por carácter.
void sort(char **, int); int main() { char *string_database[5]={'\0'}; string_database[0]="Florida"; string_database[1]="Oregon"; string_database[2]="California"; string_database[3]="Georgia"; sort(string_database, 4); return 0; } void sort(char **str, int n) { int i = 0; for (i = 0; i < n; i++) { for (int j=0;str[i][j]!='\0';j++) { printf("%c",str[i][j]); } printf("\n"); } } como str es un puntero doble, podemos usar dos subíndices sin ningún problema para llegar a los caracteres.