gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:46:24 25 4
gpt4 key购买 nike

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

还是每个开发人员都在重新发明轮子?

编辑:添加了“跨平台”。

最佳答案

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

// 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] ;
}

请注意,在以上所有内容中,诸如边界检查和确定 start < end 之类的参数的有效性留给了调用者,在这方面它们反射(reflect)了标准字符串库的理念。在大多数情况下,我更喜欢第一个,因为它具有最大的实用性并且更符合标准库的设计。 memmove() 在 memcpy() 上使用,以便源和目标可以在同一位置,如果不需要,使用 memcpy() 可能更有效。

关于c - 是否有一种优雅的行业标准方式在 C 中实现 substr ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com