2013-04-02 5 views
2

Я пишу программу переменного тока для моего MicroBlaze на ПЛИС Теперь я хочу, чтобы проверить, если я получил сообщение ОК, но strncmp и зЬгстр не работают, единственный способ, который работает этот путь:сравнение строк в C

  char*as=malloc(sizeof(int)); 

    as=p->payload; 
      if (*(as)=='o') {//first letter o 
    if (*(as+1)=='k') {//second letter 

, но это будет сложно, если у меня будет длинный текст, поэтому любой хороший подход? я попытался strncmp в этом формате:

  if (strncmp(as,"ok",2)==0)  //didnt work even changing 0 to 1 it just doesnt detectct it 
+2

'strncmp' принимает 3 аргумента - вы включаете string.h? – teppic

+3

Зачем вызывать malloc, а затем выбрасывать указатель? –

+0

Я включаю string.h и не набираю 3-й аргумент ошибкой Я выбрасываю указатель, потому что я должен сделать это таким образом или он даст ошибку, поскольку p-> полезная нагрузка void * not char * –

ответ

2

проверка синтаксис «strncmp»

int strncmp (const char * str1, const char * str2, size_t num); 

где str1 является строка C для сравнения, str2 является C строка для сравнения и num максимальное количество символов для сравнения.

Я думаю, что ввод третьей переменной num i.e Максимальное количество символов, которые вы хотите сравнить, решит вашу проблему.

+0

Как это отличается от моего более раннего ответа? –

5

От http://www.cplusplus.com/reference/cstring/strncmp/:

int strncmp(const char * str1, const char * str2, size_t num); 

Возможно, Вы забыли поставить Num, максимальное количество символов для сравнения?

Функция strncmp использует его, но зЬгстр не делает! Если сравнивать целые строки, последний, вероятно, то, что вы хотите.

2

Попробуйте перекомпилировать свою программу с предупреждениями (-Wall -Wextra).

Я думаю, что вы забыли включить определение strncmp в начале исходного файла, как это:

#include <string.h> 

Итак, когда предупреждение будет активирована, вы должны увидеть появится следующее сообщение:

warning: implicit declaration of function 'strncmp()' 

Старайтесь всегда активировать предупреждения при компиляции, это очень полезно.

+0

+1 Вы можете «всегда активировать предупреждения», помещая 'CFLAGS = '- Wall -Wextra'' в ваш bash' .profile' и всегда используйте 'make' для компиляции. –

 Смежные вопросы

  • Нет связанных вопросов^_^