Gar*_*hby 2 c string substring
是否有一种优雅的,跨平台的,行业标准的substr()C 实现方式?
或者是每个开发者重新发明轮子的情况?
编辑:添加'跨平台'.
尽管我对原始问题的评论,问题是这样的函数需要一个缓冲区来存储结果,并且不清楚这是应该由调用者提供还是由函数实例化(留下以后的问题)通过修改原始字符串,甚至创建到位.在不同的情况下,您可能需要不同的行为,因此滚动您自己的行为可能是有益的(并且在任何情况下都是微不足道的).
// Caller supplied destination
char* substr( const char* source, size_t start, size_t end, char* dest )
{
memmove( dest, &source[start], end - start ) ;
dest[end - start] = 0 ;
return dest ;
}
// Automatically instantiated destination (and a memory leak!)
char* substr( const char* source, size_t start, size_t end )
{
char* dest = malloc( end - start + 1) ;
memcpy( dest, &source[start], end - start ) ;
dest[end - start] = 0 ;
return dest ;
}
// Modify in-place (original string truncated)
char* substr( char* source, size_t start, size_t end )
{
source[end+1] = 0 ;
return &source[start] ;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上述所有内容中,诸如边界检查和确定start <end之类的参数的有效性留给了调用者,并且在这方面它们反映了标准字符串库的原理.在大多数情况下,我更喜欢第一个具有最大效用并且更符合标准库的设计.memmove()用于memcpy(),以便源和目标可能是同一个位置,如果你不需要,使用memcpy()可能更有效.