У вас есть ряд проблем с вашим кодом. Прежде всего, вы должны объявить ваш массив ключевых слов как const char *words[]
. Неправильно объявлять строковые константы как char *
без const
; это разрешено только для того, чтобы устаревший код все еще компилировался.
Вы не должны указывать размер массива 29 в объявлении, так как он хрупок. Вы должны просто использовать пустые скобки и позволить компилятору определить размер массива. Вы можете получить размер массива, выполнив sizeof(words)/sizeof(words[0])
, который все равно будет правильным, даже если вы добавите или удалите элементы из words
.
Затем ваш цикл for
никогда не прекратится (хотя в какой-то момент он почти наверняка прекратит работу). Взятие адреса значения никогда не приведет к нулевому указателю, поэтому &words[handle] != NULL
всегда будет истинным. Правильный способ перебора цикла - просто посчитать количество записей:
for(handle = 0; handle < sizeof(words)/sizeof(words[0]); handle++)
message
объявлен как массив символов. Массивы не могут быть назначены, то есть они не являются lvalues. Если вы хотите присвоить массиву, вы должны явно скопировать в него данные с чем-то вроде strcpy()
(не рекомендуется, за исключением некоторых случаев, из-за возможных переполнений буфера), strncpy()
, memcpy()
или strncpy_s()
(доступно только в Windows).
В этом случае, однако, вам совсем не нужен массив - вы просто хотите назначить указатель. Вместо этого объявите message
как const char *
. С message
, объявленным правильно, вы должны сделать:
const char *message;
...
message = words[handle];
if(!strcmp(token, message))
message = "words";
В последнем утверждении вы должны использовать двойные кавычки вокруг words
, чтобы сделать его строковой константой. Одинарные кавычки предназначены для односимвольных констант (например, 'A'
). Хотя технически они могут содержать более одного символа, порядковый номер результирующей целочисленной константы определяется реализацией, и в данном случае это не то, что вам нужно.
Я также не совсем уверен, что вы пытаетесь сделать со строкой message = "words";
. Если вы пытаетесь сделать какой-то хитрый трюк с переменной words
, остановитесь прямо сейчас, это не сработает. Си не имеет никакого отражения.