Cita de: m@o_614 en 1 Abril 2014, 17:30 PMEl arreglo lo necesito para una función como esta:Lo primero a recomendar (lo digo en buen plan) es darle un buen repaso a tu material de referencia porque hay (en este y otros mensajes) malas practicas:Código (c) [Seleccionar]char *obtenerInstruccion(char *operando,int x)
{
int i;
char *cadena = NULL,c[2];
cadena = calloc(7,sizeof(char));
for(i = x;operando[i] != ',';i++)
{
sprintf(c,"%c",operando[i]);
strcat(cadena,c);
}
return cadena;
}
para que en la condicion operando != aqui pueda ser o '\0' o la coma
* Inicializas la variable "cadena" a NULL pero lo primero que haces con ella es asignarle otro valor. Eso ultimo vuelve la inicializacion inútil, hay que eliminarla.
* El delimitador de cadena '\0' se puede agregar de forma manual o bien utilizando una función de la biblioteca estándar de C, hay que cambiar el uso de calloc por malloc.
* Das por sentado que la cadena resultante siempre tendrá menos de siete caracteres, no hay problema si ello lo tienes garantizado pero de no ser así el programa puede reventar.
* En cada iteración del bucle creas una cadena con un solo caracter mediante sprintf y después la copias con strcat. En otras palabras estas copiando caracteres y bien los copias en un bucle sin necesidad de esas dos funciones o utilizas una sola llamada a función.
El proceso de forma manual:
Código (c) [Seleccionar]
char *obtenerInstruccion(char *oper)
{
char *rv;
int i;
int j;
for (i = 0; oper[i] != '\0' && oper[i] != ','; i++)
;
if (i == 0)
rv = NULL;
else if ((rv = malloc(i + 1)) != NULL){
for (j = 0; j < i; j++)
rv[j] = oper[j];
rv[j] = '\0';
}
return rv;
}
Y utilizando funciones de la biblioteca estándar de C:
Código (c) [Seleccionar]
char *obtenerInstruccion(char *oper)
{
char *rv;
size_t i = strcspn(oper, ",");
if (i == 0)
rv = NULL;
else if ((rv = malloc(i + 1)) != NULL)
sprintf(rv, "%.*s", i, oper);
return rv;
}
No es necesario pasar la dirección del array y el indice del elemento, en su lugar pasas directamente la dirección del elemento con "a + i" donde "a" es el array e "i" el indice del elemento donde inicia la búsqueda.
Un saludo