我有一个包含此特定字符串的二进制文件:^@^Aname^@Team Fortress 2
这是我尝试使用memmem
找到它的方式:
char *game = "Team Fortress 2";
sprintf(searchString,"\1\1name\1%s\0",game);
...
if(pos = memmem(buffer,result,searchString,strlen(searchString)))
如何匹配转义字符^@
和^A
?
它似乎找到\1\1name
,而不是game
中的searchString
。
答案 0 :(得分:1)
因为你的字符串包含空值,所以它不是有效的C字符串,而字符串操作函数(例如memmem和strlen)也不起作用。你必须推出自己的版本。
最简单的方法是循环遍历字符串的每个索引,然后使用第二个循环来检查您正在搜索的字符串。有更好的和更快的方法,但如果你不需要额外的速度,它们更难以理解和实施。有关该主题的概述,请参阅Wikipedia。
答案 1 :(得分:0)
这不是符号表示法吗?
char *game = "Team Fortress 2";
sprintf(searchString,"%c%cname%c%s\0",(char)0, (char)1, (char)0, game);
...
if(pos = memmem(buffer,result,searchString,strlen(searchString)))