gpt4 book ai didi

c++ - memchr 一个bin文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:38 26 4
gpt4 key购买 nike

我正在尝试在二进制文件中查找 0x0D0A。但是 strchr 在找到 0x00 时停止并且我没有找到正确的位置。

请告诉我为什么它不起作用

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

main(){
FILE *f;
long size;
char *buffer;

f = fopen(filename, "rb");
if(f==NULL){fputs("File error",stderr); exit(1);}

// obtain file size
fseek(f, 0, SEEK_END);
size = ftell(f);
rewind(f);

// allocate memory to contain the whole file
buffer = (char*) malloc(sizeof(char)*size);
if(buffer == NULL){fputs("Memory error",stderr); exit(2);}

// copy the file into the buffer
if((size_t)fread(buffer,1,size,f) != size){fputs("Reading error",stderr); exit(3);}
fclose(f);

// get positions
char *p;
p = strchr(buffer, 0x0D0A);
while(p != NULL){
printf("found at %d\n", p-buffer-1);
p = strchr(p+2, 0x0D0A);
}

free(buffer);
return 0;
}

更新

if(((char*) memchr(p+1, 0x0A, size))-1 == p) 现在不起作用

int *pos,i=0;
char *p;
p = (char*) memchr(buffer, 0x0D, size);
while(p != NULL){
if(((char*) memchr(p+1, 0x0A, size))-1 == p){
pos[i++] = p-buffer-1;
printf("found at %d\n", pos[i-1]);// check
}
p = (char*) memchr(p+2, 0x0D, size);
}

最佳答案

使用 memchr 查找 '\r',然后测试 '\n' 是否是下一个字符。

关于c++ - memchr 一个bin文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com