Rom*_*her 8 c coding-style c-strings
编写在C中返回字符串的方法时,什么是更好的做法?
传入缓冲区和大小:
void example_m_a(type_a a,char * buff,size_t buff_size)
Run Code Online (Sandbox Code Playgroud)
或制作和返回适当大小的字符串:
char * example_m_b(type_a a)
Run Code Online (Sandbox Code Playgroud)
PS你怎么看待返回缓冲区ptr以允许赋值样式和嵌套函数调用,即
char * example_m_a(type_a a,char * buff,size_t buff_size)
{
...
return buff;
}
Run Code Online (Sandbox Code Playgroud)
传递缓冲区作为参数解决了此类代码可能遇到的大多数问题.
如果它返回一个指向缓冲区的指针,那么你需要决定它是如何分配的,以及调用者是否负责释放它.该函数可以返回一个不需要释放的静态指针,但它不是线程安全的.
传递缓冲区和大小通常不太容易出错,特别是如果字符串的大小通常为“合理”大小。如果动态分配内存并返回指针,则调用者负责释放内存(并且必须记住根据函数分配内存的方式使用相应的内存释放函数)。
如果您检查大型 C API(例如 Win32),您会发现几乎所有返回字符串的函数都使用第一种形式,其中调用者传递缓冲区和大小。只有在有限的情况下,您可能会找到函数分配返回值的第二种形式(我目前想不出任何形式)。