
Venkat Rangan wrote:
John,
Thanks for following up. We know the size of the buffer we allocated. A workaround is to insert a NULL character at the end of the buffer, but given that these messages are created elsewhere in other components and are delivered to our search module, we do not have an opportunity to insert NULL character, forcing a copy to separate buffer under our control.
The ideal interface would be: 1) terminate when NULL character is found 2) if NULL character not found, terminate when end marker is reached.
I'm still somewhat confused how can use the string at all (leaving aside regex for now), if you don't know how long it is, or whether there is a terminating NULL or not. But I assume that either the buffer is full (no NULL) or not full (there is a NULL), if you know from an error code or something whether the buffer is full, then the string length is either: * The size of the buffer if the error was raised, or: * strlen(buffer) if no error was raised. Failing that you would need a "safe strlen" as you already mentioned: int strlen_s(const char* p, int len) { for(int r = 0; r < len; ++r) { if(p[r] == 0) return r; } return len; } Or you could create your own iterator type that equals the end-of-sequence iterator when either a NULL character or an end of buffer is found, but to be honest it would probably be quicker to calculate the length first as above. HTH, John.