1

I got some code and I want improve it to find and replace bytes in file so I want to find all origbytes in FILE and then replace it with newbytes then save file, I know how to open, write and save, but hot I can find bytes in char?

 FILE* file;
 file = fopen("/Users/Awesome/Desktop/test", "r+b");
 int size = sizeof(file)+1;
 char bytes [size];
 fgets(bytes, size, file);
 for (int i=0; i<size; i++){ 
     char origbytes  []  = {0x00, 0x00};
     char newbytes   []  = {0x11, 0x11};
     if (strcmp(bytes[i], origbytes)) //Here the problem
     {
         fseek(file, i, SEEK_SET);
         fwrite(newbytes, sizeof(newbytes), 1, file);
     }
 }
 fclose(file);
4

4 回答 4

4

strcmp()用于字符串比较而不是字符比较。两个字符可以直接比较

if ( bytes[i] == origbytes[something] )

此外,您不应该应用sizeof()文件指针来确定文件大小。您应该使用搜索到文件末尾,fseek然后查询ftell 二进制文件。对于二进制文件,使用类似fstat

还有一点需要注意的是,fgets如果它看到换行符,它会在 EOF 之前返回很多。因此,在您的代码中,即使进行了我们建议的更改,您也可能无法读取整个文件内容。你需要fread 适当地使用

于 2012-05-14T12:41:09.040 回答
1

字符串在 C 标准库中以 null 结尾。您的搜索数据实际上是零长度字符串。你想要memcmp

memcmp (&bytes [i], origBytes, 2)
于 2012-05-14T12:41:48.947 回答
1

首先 sizeof(file) + 1 只是返回指针的大小 + 1。我认为文件大小不需要这个。使用这个:你如何确定 C 中文件的大小? 然后,由于您比较字节(或多或少 smae 为 char),您只需使用 = 进行比较

于 2012-05-14T12:42:20.723 回答
0

您可以使用 fseek 然后 ftell 函数来获取文件大小,而不是 sizeof。

于 2012-05-14T14:59:47.323 回答