为什么strstr无法从环形缓冲区中找到子字符串?

身体

我有一个不断填充的字符的环形缓冲区数组,两个位置之间的数据:counter和counter2。我需要提取该数据并将其与文字字符串进行比较。

我正确地获取了数据并将其放置在str数组中,但是无法正确获取它来找到我想要的字符串文字。在这种情况下,我想从以下位置找到字符串“ OK”:

AT
OK

使用此代码:

#define BUFFER_SIZE 512
volatile int rxn=0; // buffer 'element' counter.
volatile char rx[BUFFER_SIZE]; 
volatile uint8_t rxFlag = 0; 

void getData(){
  int counter, counter2;
  counter=rxn;
///some time has passed
  counter2=rxn;

  char str[1024]={'\0'};

  for (int i=counter ; i!=(counter2) ; i=(i+1)%BUFFER_SIZE){
    str[i]=rx[i];// grab the data
  }
  for (int i=0; i<1024; i++){
    print(str[i]);  // print all the data
  }
  if(strstr(str, "OK") != NULL){
    print("found");  // this never executes.
  }
  }

但是,永远不会找到“确定”。文字字符串应为“ AT \ nOK \ n \ 0”或“ AT \ nOK \ 0”。为什么代码片段不起作用?

萨马拉斯

//这永远不会执行

问题不在于调用strstr方法的方式,而在于您填充的方式str

运行此单元测试以确信该方法:

#include <stdio.h>
#include <string.h>

int main(void) {
  char str[] ="AT\nOK\n\0"; // Same for 'AT\nOK\0'
  if(strstr(str, "OK") != NULL){
    printf("found");  // will be printed
  }
  return 0;
}

正如@@ hyde所评论的那样:您将数据从环形缓冲区复制到中间的某个位置str,除非它counter为0。所以str将从0开始,IOW是一个空字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么printf没有在缓冲区溢出中打印出字符串?

来自分类Dev

为什么更改缓冲区比在Javascript中追加字符串要慢?

来自分类Dev

当我处理字符串时,为什么会得到“预期的字符串或缓冲区”?

来自分类Dev

缓冲区到字符串?

来自分类Dev

字符串的循环缓冲区

来自分类Dev

在使用scanf扫描字符串的情况下,为什么不存储先前的输入缓冲区?

来自分类Dev

在使用scanf扫描字符串的情况下,为什么不存储先前的输入缓冲区?

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

来自分类Dev

强制转换为Unicode:需要字符串或缓冲区,找到标记

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int

来自分类Dev

Python TypeError:强制转换为Unicode:需要字符串或缓冲区,找到元组

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到ResultSet

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了PosixPath

来自分类Dev

强制转换为Unicode:需要字符串或缓冲区,找到列表

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到WSGIRequest

来自分类Dev

Python:TypeError: 强制转换为 Unicode: 需要字符串或缓冲区,找到文件

来自分类Dev

为什么“在字符串中找到”在php中无法正常工作?

来自分类Dev

在Linux内核函数内的缓冲区中查找子字符串

来自分类Dev

字符串/缓冲区中的EOF文件字符

来自分类Dev

字符串缓冲区不打印“字符”

来自分类Dev

为什么我们使用char *作为缓冲区,为什么不使用boost :: asio中的字符串呢?

来自分类Dev

在Rust中实现字符串缓冲区的最佳方法是什么?

来自分类Dev

在堆栈上分配大小合适的字符串缓冲区的好方法是什么?

来自分类Dev

这个字符串代表 serv_addr 缓冲区的格式是什么?

来自分类Dev

gsub!复制字符串的缓冲区?

来自分类Dev

ORA-19011:字符串缓冲区太小

Related 相关文章

  1. 1

    为什么printf没有在缓冲区溢出中打印出字符串?

  2. 2

    为什么更改缓冲区比在Javascript中追加字符串要慢?

  3. 3

    当我处理字符串时,为什么会得到“预期的字符串或缓冲区”?

  4. 4

    缓冲区到字符串?

  5. 5

    字符串的循环缓冲区

  6. 6

    在使用scanf扫描字符串的情况下,为什么不存储先前的输入缓冲区?

  7. 7

    在使用scanf扫描字符串的情况下,为什么不存储先前的输入缓冲区?

  8. 8

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件

  9. 9

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

  10. 10

    强制转换为Unicode:需要字符串或缓冲区,找到标记

  11. 11

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int

  12. 12

    Python TypeError:强制转换为Unicode:需要字符串或缓冲区,找到元组

  13. 13

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到ResultSet

  14. 14

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

  15. 15

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了PosixPath

  16. 16

    强制转换为Unicode:需要字符串或缓冲区,找到列表

  17. 17

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

  18. 18

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到WSGIRequest

  19. 19

    Python:TypeError: 强制转换为 Unicode: 需要字符串或缓冲区,找到文件

  20. 20

    为什么“在字符串中找到”在php中无法正常工作?

  21. 21

    在Linux内核函数内的缓冲区中查找子字符串

  22. 22

    字符串/缓冲区中的EOF文件字符

  23. 23

    字符串缓冲区不打印“字符”

  24. 24

    为什么我们使用char *作为缓冲区,为什么不使用boost :: asio中的字符串呢?

  25. 25

    在Rust中实现字符串缓冲区的最佳方法是什么?

  26. 26

    在堆栈上分配大小合适的字符串缓冲区的好方法是什么?

  27. 27

    这个字符串代表 serv_addr 缓冲区的格式是什么?

  28. 28

    gsub!复制字符串的缓冲区?

  29. 29

    ORA-19011:字符串缓冲区太小

热门标签

归档