我有一些代码,我想改进它来查找和替换文件中的字节 所以 我想在FILE中找到所有原始数据,然后用newbytes替换它 然后保存文件,我知道如何打开,写入和保存,但很热我可以在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);
答案 0 :(得分:4)
strcmp()
用于字符串比较而不是字符比较。可以直接比较两个字符
if ( bytes[i] == origbytes[something] )
此外,您不应在文件指针上应用sizeof()
来确定文件大小。您应该使用fseek
搜索文件末尾,然后查询ftell
except for binary files。对于二进制文件,请使用fstat
还有一点需要注意的是,fgets
如果看到换行符,则会在EOF之前返回很多。因此,在您的代码中,即使执行了我们建议的更改,您也可能无法读取整个文件内容。您需要使用fread
appropriately
答案 1 :(得分:1)
字符串在C标准库中以空值终止。您的搜索数据实际上是一个零长度字符串。您想要memcmp
。
memcmp (&bytes [i], origBytes, 2)
答案 2 :(得分:1)
首先sizeof(file)+ 1只返回指针的大小+ 1.我认为你不需要这个文件的大小。使用此:How do you determine the size of a file in C? 然后,因为你比较字节(或多或少smae作为char)你只需比较使用=
答案 3 :(得分:0)
你可以使用fseek然后使用ftell函数来获取文件大小,而不是sizeof。