操作环境:vs2022 C++;
现象:我从文本文件分块读取数据,顺序查找关键字时, 其中要检查指针rec1是否越界(上界为buffer+ReadLength)
注: 各自定义
1.当如下写时:
会发生:每十次循环,就会跳出循环!但应当循环ReadLength,才跳出才对。
2.当如下写时:
会发生:正常循环 ReadLength次
问题:虽然函数的功能完成了,但我不理解为什么?第一种写法是会出错!请大神教教!-!
详细原码如下:(其中由一部分是为了观察写的)
//分块顺序查找
int SeqSearch(FILE* SourceFile, char* k)
{
char* buffer = (char*)malloc(BufferSize);
// 检查内存分配是否成功
if (buffer == NULL) {
cout << "内存分配失败的处理" << endl;
exit(2);
}
fseek(SourceFile, 0L, SEEK_SET);// 将文件指针移动到文件开头
size_t ReadLength;
record* rec1;
int i = 0;
while (ReadLength = fread(buffer, RecordSize, RecordCount, SourceFile))// 从文件中读取 RecordSize*RecordCount的数据到缓冲区,失败返回0,成功则返回实际读取到的文件内容的块数。
{
rec1 = (record*)buffer;
cout << "域外之地\n";
while ((char*)rec1 < (buffer + ReadLength) && _strnicmp((char*)k, (char*)rec1, 10) != 0)//比较两个字符串中指定数目10前的字符(不考虑大小写)。
{
//(char*)rec1 < (buffer + ReadLength) 此时每十次循环,就会跳出循环!
//rec1 <(record*) buffer + ReadLength 这样写就是正常循环 ReadLength次
if (i < 2000)
{
cout << i << ":";
printf("%.10s %.20s %p %p %d", (char*)k, (char*)rec1, rec1, buffer,ReadLength);
cout << endl;
}
rec1++;
i++;
}
if (_strnicmp((char*)k, (char*)rec1, 10) == 0)
{
printf("查找成功:\n%.100s", (char*)rec1);
free(buffer);
return i;
}
}
return -1;
}