考虑一种情况:我有一个已知长度的缓冲区,可能存储一个以null结尾的字符串,我需要知道字符串的长度.
问题是如果我使用strlen() 并且字符串结果是非空终止程序在读取超出缓冲区结束时运行到未定义的行为.所以我想要一个像下面这样的函数:
size_t strlenUpTo( char* buffer, size_t limit )
{
size_t count = 0;
while( count < limit && *buffer != 0 ) {
count++;
buffer++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
所以它返回字符串的长度,但从不尝试读取超出缓冲区的结束.
C库中是否已有这样的功能,还是我必须使用自己的功能?
R..*_*R.. 10
使用memchr(string, 0, limit),如:
size_t strlenUpTo(char *s, size_t n)
{
char *z = memchr(s, 0, n);
return z ? z-s : n;
}
Run Code Online (Sandbox Code Playgroud)
pmg*_*pmg 10
根据我的文档,POSIX有 size_t strnlen(const char *src, size_t maxlen);
n = strnlen("foobar", 7); // n = 6;
n = strnlen("foobar", 6); // n = 6;
n = strnlen("foobar", 5); // n = 5;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |