Более чистая рабочая версия.
Основная проблема в (char *)(typtbl+i)
заменена на typtbl[i]
в следующем коде.typtbl+i
эквивалентно &typtbl[i]
, поэтому, если у меня хорошая память, это указатель на указатель строки, а не указатель самой строки
Я добавил NULL в конце массива, чтобыможно было остановить, если строка отсутствует, и вернуть -1, чтобы четко сказать, что она не найдена.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int what(char *token);
int main()
{
int i = 0;
char string[] = "jsr";
i = what(string);
printf(" location of input is %d \n", i);
return 0;
}
int what(char *token)
{
char *typtbl[] = {
"mov",
"cmp",
"add",
"jsr",
"not",
"clr",
"lea",
NULL
};
int i = 0;
while(typtbl[i] && !(strcmp(typtbl[i], token) == 0)) {
++i;
}
if(!typtbl[i])
i = -1;
return i;
}
char *token; token=&string[0];
бесполезно, поскольку string == &string[0]
.