2

我正在为 fpga 上的 microblaze 编写 ac 程序,现在我想检查我是否收到了消息,但 strncmp 和 strcmp 不起作用,唯一有效的方法是:

           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 
4

3 回答 3

5

来自http://www.cplusplus.com/reference/cstring/strncmp/

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

您是否可能忘记提供要比较的最大字符数num ?

函数strncmp使用它,但strcmp没有!如果比较整个字符串,后一个可能是您想要的。

于 2013-04-02T19:26:14.897 回答
2

检查“strncmp”的语法

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

其中str1是要比较的 C 字符串,str2是要比较的 C 字符串, 是要比较num的最大字符数。

我认为引入第三个变量num,即您要比较的最大字符数将解决您的问题。

于 2013-04-02T19:36:38.043 回答
2

尝试使用警告 ( -Wall -Wextra) 重新编译您的程序。

我的猜测是您忘记strncmp在源文件的开头包含定义,如下所示:

#include <string.h>

因此,当警告将被激活时,您应该会看到出现以下消息:

warning: implicit declaration of function 'strncmp()'

尝试在编译时始终激活警告,这非常有帮助。

于 2013-04-02T20:57:05.490 回答