【问题标题】:Search inside a string that contains a new line?在包含新行的字符串中搜索?
【发布时间】:2016-10-02 20:58:44
【问题描述】:

我正在使用这个:

  if(strstr(inData, respond) != NULL)

inData 中搜索字符串CMD

问题是当新数据看起来像这样时:

Reboot
CMD

strstr 不会找到它,因为它会停止搜索新行的位置。 有没有一种优雅的方法(使用花哨的功能,因为我做不到)来克服它?

【问题讨论】:

  • strstr 可以找到换行符(包括)。 CMD 前面有一个非法字符。 (也许'\0'
  • 谢谢,我怎么没看到?我在这里展示的是 inData 打印。
  • 十六进制转储inData
  • 我同意@BLUEPIXY,strstr() 将换行符视为任何其他字符。但是,我也会将您的调试扩展到respond。您确定respond 指向字符CMD\0?如果respond 包含换行符,或者不包含 NUL 分隔符 (\0),strstr() 将同样失败。
  • 谢谢大家,我正在失去理智,我想即使我用十六进制转储它也看不到一些东西。

标签: c


【解决方案1】:

正如 cmets 中所指出的,strstr 不会在换行符边界处停止,而只会在字符串终止符 (\0) 处停止

这是手册页中的相关部分:

描述 strstr() 函数在字符串 haystack 中查找子字符串 needle 的第一次出现。终止的空 字节 ('\0') 不进行比较。

所以假设是,在 CMD 或 inData 之一中有空字节。 您应该调查this wayhexdump it 中的字符串inData 和CMD(如@BLUEPIXY 所建议)

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 2021-06-12
    • 2019-05-17
    • 2013-06-26
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多