在字节数组中查找字符串。也就是说,它的内容从文件中读取到一个字节数组中,然后在这个数组中搜索一个字符串。通常的 find() 或 strstr() 无济于事,因为文件是二进制文件->即可能有换行符、空字节等。我发现了memmem它,但对我来说,这个选项原来是非-工作 - 它返回SIGSEGV:
#include <stdio.h>
#include <sys/stat.h>
#include <fstream>
#include <string.h>
using namespace std;
int main() {
struct stat buf;
stat("binary", &buf);
const unsigned int fsize = buf.st_size;
ifstream bins;
bins.open("binary", ios::in|ios::binary);
char *cbuf = new char[fsize];
char ch;
unsigned int k = 0;
while(bins.get(ch)) {
cbuf[k] = ch;
k++;
}
bins.close();
const void *pos = memmem(cbuf, fsize, "/system", 7);
const int *ipos = (int *)pos;
delete[] cbuf;
printf("%d", *ipos);
return 0;
}
~/work $ g++ -g main.cpp
~/work $ ./a.out
Segmentation fault
~/work $ gdb ./a.out
gdb > r
Starting program: /home/me/work/a.out
Program received signal SIGSEGV, Segmentation fault.
0x0000005555555dd0 in main () at main.cpp:24
24 printf("%d", *ipos);
而且我需要在字节数组中找到一个字符串,以便让自己知道数组中字符串开头的位置。也就是说,如果搜索词的第一个字符是 439 字节,那么应该返回数字 439。
减去指针以
char *计算偏移量。