strcmp很奇怪

时间:2011-06-26 07:41:14

标签: c file buffer printf strcmp

我有一个小程序,它会在文件中搜索一些字符串。 这个字符串在末尾有一个可变部分,并且前面总是以一个告诉大小的字节开头。

例如,我们将在“aaaaa.http://www.example.combbbbb”中查找“http://”(ASCII码“。”为0x17。

假设我们已经打开了该文件。 要执行的代码是:

while(car != EOF){
    car = fgetc(file[ii]); // we get everything in the file
    lastBuffStart=ftell(file[ii]);
    ij=1;
    buffer[0]=car; // we start editing the buffer
    printf("\n%d (%c) - %d (%c) ",car,car,base[0],base[0]);
    while(ij<(buffsize-1)){
         buffer[ij]=fgetc(file[ii]);
         printf("\n | %d (%c) - %d (%c) ",buffer[ij],buffer[ij],base[ij],base[ij]);
         ij++;
    }

    fseek(file[ii],lastBuffStart,0); // we get back to the old position before the buffer continues

    if(strcmp(buffer,base)==0){ // we compare
         byteSize = (ftell(file[ii])-1); // we get the position of the size byte
         printf("\nFound : 0x%x\n",byteSize);
         }
    }

我们读取所有文件,并在缓冲区中放入下一个要与基础进行比较的字符(http://)。

我的问题是如果我们删除printf(“\ n |%d(%c) - %d(%c)”,buffer [ij],buffer [ij],base [ij],base [ij] ); 找不到任何东西 ......

我真的看不出我做错了什么。

你能帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您忘记了空终止缓冲区。或者,您应该使用memcmp而不是strcmp。此外,如果您使用fread而不是while循环,代码会更清晰。