程序适用于.wave文件。如何比较字符串“部分”(以返回匹配的字符数)?
下面的代码是查找“数据”子块的程序的一部分。它写出所有必要的数据块到输出文件,然后找到"data"
(copyes接下来的4个字节为char comp_dataID[4];
,并与const char dataID[4] = "data";
比较):
while(1) /* finding "data"*/ {
fread(comp_dataID, 4, 1, input);
if (memcmp(comp_dataID, dataID, 4) == 0) {
printf(">>> \"data\" found!\n");
fwrite(&comp_dataID, 1, 4, output);
break;
}
else {
fseek(input, -3, SEEK_CUR);
}
}
可以有很多extentional子块前的“数据”,所以我想优化程序:
- 如果接下来的4个字节包含“....”,则复制下4个字节。 (跳过3次不必要的操作)
- 如果“... d”,则
fseek(input, -1, SEEK_CUR);
/*在“d”* /之前设置pionter,然后复制下4个字节。 - 如果“..da”然后
fseek(input, -2, SEEK_CUR);
/*在“d”* /之前设置pionter,然后复制接下来的4个字节。 - 如果“.dat”然后
fseek(input, -3, SEEK_CUR);
/*在“d”* /之前设置pionter,然后复制接下来的4个字节。
问题是我不明白如何比较“... d”和“数据”。即如何找出char comp_dataID[4];
containd“... d”或“..da”或“.dat”。
问题:有没有做这个(返回相匹配的字符数的任何功能:在以下情况下0的情况下“......‘1’... d”等等。)?
......或者我会用for()
周期ti找到“d”,然后找到“a”,然后找到“t”。根据rezults,在“d”之前设置pionter以复制下一个4字节(“数据”)。
PS 此CHAR [4]在接下来的4个字节的所有样本的大小(它在程序中使用)
不,我没有在...分析器中运行我的代码。 (我不知道它是什么?) 我不是很熟练的程序员,但我确信如果有非常大的“额外”子块,这种优化将有助于节省一些机器资源(上午我对吗?)。 – yulian
Profiler上的信息: http://stackoverflow.com/questions/1794816/recommendations-for-c-profilers – Nobilis
'strstr()'返回什么类型? – yulian