Я недавно унаследовал код, написанный на C, без какой-либо документации.Я работал над ее оптимизацией и исправлением, и я сталкивался с этим.
int LookBack(char * Start, int Length, char *Ignore)
{
char LookBuffer[10];
//while(Start[-1] && Length--) Start--; // Start[-1]. No idea what that is supposed to mean.
while(Length > 0 && Start[0]){
Start--;
Length--;
}
strncpy(LookBuffer, Start, sizeof(LookBuffer));
if(strcasestr(LookBuffer, Ignore)) {
return(1);
}
return(0);
}
Эта функция используется для определения, находится ли подстрока на определенном расстоянии перед строкой Start
.Например, возьмем строку The designation is API RP 5L1
, а Start
- указатель на API RP 5L1
.Итак, если Ignore = "The"
и Length = 10
, функция вернет 0
.
Мой вопрос
Valgrind выдаст мне ошибку Invalid read of size 1
, поскольку она читает за выделенную память вwhile(Length > 0 && Start[0])
или так я верю.Можно ли как-нибудь проверить, находится ли Start[0]
в выделенной памяти, не сделав неверное чтение?