在C中搜索字符串的字符数组

在C中搜索字符串的字符数组,c,strstr,C,Strstr,我有一个字符串如下所示: "show net\r\r\nSSid=roving1\r\nChan=1\r\nAssoc=FAIL\r\nRate=12, 24Mb\r\nAuth=FAIL\r\nMode=NONE\r\nDHCP=FAIL\r\nBoot=0\r\nTime=OK\r\nLinks=0\r\n<4.00> " 但是,它返回的值为0。但如果我只是发出命令: res = strstr("nnAuth=FAILn", "Auth=FAIL"); 它返回一个值。当它

我有一个字符串如下所示:

"show net\r\r\nSSid=roving1\r\nChan=1\r\nAssoc=FAIL\r\nRate=12,   24Mb\r\nAuth=FAIL\r\nMode=NONE\r\nDHCP=FAIL\r\nBoot=0\r\nTime=OK\r\nLinks=0\r\n<4.00> "
但是,它返回的值为0。但如果我只是发出命令:

res = strstr("nnAuth=FAILn", "Auth=FAIL");
它返回一个值。当它试图搜索我的字符数组uart\r时,会出现什么问题

编辑:


看起来问题出在我在将新数据放入数组之前清除数组的内存集上。我使用以下命令将其填充为0:

res = strstr("nnAuth=FAILn", "Auth=FAIL");
memset(uart_-rd,0,sizeof(uart_-rd))

而我现在把它改成了

memset(uart_-rd,”,sizeof(uart_-rd))

这一切似乎都在起作用。谢谢你帮我诊断我的问题所在

这个代码

    char uart_rd[] = "show net\r\r\nSSid=roving1\r\nChan=1\r\nAssoc=FAIL\r\nRate=12,   24Mb\r\nAuth=FAIL\r\nMode=NONE\r\nDHCP=FAIL\r\nBoot=0\r\nTime=OK\r\nLinks=0\r\n<4.00> ";
    char *res;
    res = strstr(uart_rd, "Auth=FAIL");
    printf("%s", res);
char uart\u rd[]=“show net\r\r\nSSid=roving1\r\nChan=1\r\nAssoc=FAIL\r\nRate=12,24Mb\r\nAuth=FAIL\r\nMode=NONE\r\nDHCP=FAIL\r\nBoot=0\r\nTime=OK\r\nLinks=0\r\n”;
字符*res;
res=strstr(uart_rd,“Auth=FAIL”);
printf(“%s”,res);
给出此输出:

Auth=FAIL
Mode=NONE
DHCP=FAIL
Boot=0
Time=OK
Links=0
<4.00>
Auth=FAIL
模式=无
DHCP=失败
启动=0
时间=正常
链接=0

因此,您最好检查字符串的声明。

uart\U rd是如何声明的?
strstr()
确实有效。如果在数组中找不到子字符串,则子字符串不存在。可能是编码问题,或者您在干草堆或针中意外粘贴了“不可见”字符,或者您的代码中的另一个位置出现了其他错误(例如,缓冲区溢出会覆盖数组的内容或诸如此类的内容)。可能是身份验证之前的\n导致了问题。uart_rd声明如下:char uart_rd[1000];请给出一个可以用来重现你的问题的例子。我同意,我也尝试过同样的方法,并且成功了。我想知道这是否与我的数组大小有关?我的char数组被声明为char uart_rd[1000],它由来自外围设备的数据填充。有时,数据量很大,因此数据量很大。因此,当它被上面的数据填充时,它会将其放入大约90个位置,而数组的其余部分则被0填充。阵列的大小可能会引发问题吗?不,我不这么认为。在上面的代码中,大小为1000的
uart\u rd
将给出相同的输出。您是如何声明
res
变量的?你能展示一下吗?看起来问题出在我在将新数据放入数组之前清除数组的内存集上。我使用命令用0填充它:memset(uart_-rd,0,sizeof(uart_-rd));而我现在把它改成了memset(uart_-rd,“,sizeof(uart_-rd));这一切似乎都在起作用。谢谢你帮我诊断我的问题所在!