Lo primero a cambiar en esta declaración:
char lista_instrucciones[NUM_INSTR][10] = {
{"PRINT"},
{"SUM"},
{"EXIT"}
};
Es eliminar las llaves delimitando las cadenas literales ya que no son necesarias, debería ser:
char lista_instrucciones[NUM_INSTR][10] = {
"PRINT",
"SUM",
"EXIT"
};
Se espera que al pasar las variables codigo y codigo2 a la función identificador_cadena, esta imprima en pantalla:
Encontrado PRINT en PRINT
Encontrado EXIT en EXIT
Eso sucede si se realizan dos llamadas a la función y antes de ello la variable "global" "pos" almacena el valor cero:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define saber_letra(ch) isalpha(ch)
#define NUM_INSTR 3
char lista_instrucciones[NUM_INSTR][10] = {
"PRINT",
"SUM",
"EXIT"
};
int pos;
void identificador_cadena (unsigned char *codigo);
int main (void)
{
char *codigo = "PRINT BASURA!", *codigo2 = "EXIT TRASH";
pos = 0;
identificador_cadena (codigo);
pos = 0;
identificador_cadena (codigo2);
return EXIT_SUCCESS;
}
void identificador_cadena (unsigned char *codigo)
{
unsigned short int pos_buffer = 0;
char *buffer
= (char *) malloc (1 * sizeof (char) );
while (saber_letra (codigo[pos]) ) {
buffer[pos_buffer] = codigo[pos];
pos++;
pos_buffer++;
buffer
= (char *) realloc (buffer
, (pos_buffer
+ 1) * sizeof (char) ); }
buffer[pos_buffer] = '\0';
for (pos_buffer = 0; pos_buffer < NUM_INSTR; pos_buffer++)
if (!strcmp (buffer
, lista_instrucciones
[pos_buffer
]) ) printf ("Encontrado %s en %s\n", lista_instrucciones
[pos_buffer
], buffer
);
return;
}
¿Alguien podría determinar el error?, no entiendo porque esto sucede
El problema es que solo publicas un fragmento del programa y con eso no es posible determinar la causa del error. De nuevo verifica el numero de llamadas y el valor de la variable "pos" antes de ellas.
Un saludo