Estoy tratando de pasar una matriz de cadenas de caracteres (cadenas de estilo C) a una función. Sin embargo, no quiero colocar un tamaño máximo en la longitud de cada cadena que entra en la función, ni tampoco quiero asignar las matrices dinámicamente. Aquí está el código que he escrito en primer lugar:Al pasar matriz de cadenas de caracteres a la función
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *s[])
{
printf("Entering Fun\n");
printf("s[1]=%s\n",(char *)s[1]);
}
int main(void)
{
char myStrings[2][12];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
fun(myStrings);
return(0);
}
Tengo una falla seg cuando se ejecuta y la siguiente advertencia del compilador: stackov.c: En la función 'main': stackov.c: 17: advertencia: pasando el argumento 1 de 'diversión' desde el puntero incompatible tipo stackov.c: 5: nota: esperado 'char **' pero el argumento es del tipo 'char (*) [12]'
Sin embargo, cuando cambio el main() a la siguiente funciona:
int main(void)
{
char myStrings[2][12];
char *newStrings[2];
strcpy(myStrings[0],"7/2/2010");
strcpy(myStrings[1],"hello");
newStrings[0]=myStrings[0];
newStrings[1]=myStrings[1];
fun(newStrings);
return(0);
}
¿No es la matriz [2] [12] lo mismo que una matriz de punteros de caracteres cuando se pasa a una función?
Esto tiene la ventaja de almacenar solo el número real de caracteres necesarios para las cadenas. El inconveniente es que también se asigna un puntero (adicional) para cada cadena. Pero la facilidad de uso de los punteros es la principal ventaja. –
Sí, sé que esto funcionó, pero para la aplicación real, no pude inicializar la matriz en tiempo de compilación. – Mike
@Mike: cuando lo utiliza en una función, la matriz se inicializa en realidad en tiempo de ejecución. – jpalecek