在C中实现substr是否有一种优雅的行业标准方式?

Gar*_*hby 2 c string substring

是否有一种优雅的,跨平台的,行业标准的substr()C 实现方式?

或者是每个开发者重新发明轮子的情况?

编辑:添加'跨平台'.

Cli*_*ord 5

尽管我对原始问题的评论,问题是这样的函数需要一个缓冲区来存储结果,并且不清楚这是应该由调用者提供还是由函数实例化(留下以后的问题)通过修改原始字符串,甚至创建到位.在不同的情况下,您可能需要不同的行为,因此滚动您自己的行为可能是有益的(并且在任何情况下都是微不足道的).

// 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()可能更有效.