【发布时间】:2016-11-21 20:47:49
【问题描述】:
我想编辑文件的一些位。我打开文件并确定第一个字节指针。因此,在 ChangeBit 函数中,将一些位替换为 1。
当我想调试 ChangeBit 函数时,在 for 循环的第一次迭代中,调试光标从函数中跳出并且进程不会终止并且代码继续到函数之后的行。
怎么了?
void changeBit(char *ptr, int bitLen, int startPoint)
{
ptr += startPoint / 8;
startPoint %= 8;
int tmpBit = 1;
for (int i = startPoint; i < bitLen; i++)
{
ptr[i / 8] = (ptr[i / 8] | tmpBit << (7 - (i % 8)));
//after this line in first iteration, debug cursor jump out of function
}
}
int main(void)
{
// open and mmap() the file
hFile = CreateFile(input_file_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
bytes_left = GetFileSize(hFile, NULL);
hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
stream_pos = (unsigned char*)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
changeBit(stream_pos,5,0); // not working
// copy all bytes to other memory but still not working
char *OutFileContent;
OutFileContent = malloc(bytes_left);
memcpy(OutFileContent, stream_pos, bytes_left);
changeBit(OutFileContent,5,0); // not working
//write new bits stream to out file
}
指针有问题吗?
【问题讨论】:
-
changeBit(OutFileContent,5,12);-->changeBit(OutFileContent,12,5);? -
否,changeBit 函数适用于任何正偏移量。并假设输入文件大于 10 K。
-
你没有抓住重点。您的最后两个参数似乎已交换。因此,for 循环体永远不会执行,因为
startPoint大于bitlen。或者你需要改变for循环条件。 -
好的,抱歉,我编辑问题。它来自坏例子。但问题还没有解决。
标签: c++ c visual-studio debugging pointers