考虑一种情况:我有一个已知长度的缓冲区,它可能存储了一个以null结尾的字符串,我需要知道字符串的长度。
问题在于,如果我使用strlen()函数并且该字符串最终不是以null结尾,则程序会在读取超出缓冲区结尾时遇到未定义行为。因此,我想要一个类似以下函数的函数:
问题在于,如果我使用strlen()函数并且该字符串最终不是以null结尾,则程序会在读取超出缓冲区结尾时遇到未定义行为。因此,我想要一个类似以下函数的函数:
size_t strlenUpTo( char* buffer, size_t limit )
{
size_t count = 0;
while( count < limit && *buffer != 0 ) {
count++;
buffer++;
}
return count;
}
需要一个函数返回字符串的长度,但不要试图读取缓冲区末尾之外的内容。
C库中是否已经有这样的函数,还是我必须使用自己的函数?
strnlen
函数,您可以使用我的答案作为替代品。将替代函数命名为strnlen
并确保其与 POSIX 的strnlen
函数具有相同的语义,这可能比创建一个不同命名且可能行为不同的版本更好。 - R.. GitHub STOP HELPING ICE