我似乎可能需要着手一些跨平台项目,而部分项目必须使用C或C++完成(尚未确定,因此问题在于两者)。一般而言,我将主要处理基于文本的内容和字符串。
该C/C++将具有可从更高级别的平台相关代码中调用的API。
我的问题是:建议使用什么类型的字符串来处理字符串,特别是在声明公共(public)接口(interface)时?有推荐的标准技术吗?有什么要避免的吗?
我几乎没有编写C或C++代码的经验,即使在Windows上也没有,因此根本没有像跨平台这样的东西。因此,我真正想要的是使我以正确的方式进行工作,并避免做一些愚蠢的事情,这些事情肯定会引起很多痛苦。
编辑1:提供更多有关预期用途的上下文。
该API将通过以下方式使用:
从托管C#代码通过p/invoke调用
最佳答案
规则
于6年后更新:出于互操作性的原因,我建议使用此API(因为许多API已经使用了空终止,并且有多种表示计数字符串的方法),而不是从最佳设计的角度来看最好的API。今天,我可能会说前者不太重要,如果可以的话,建议使用计数字符串而不是以空终止的字符串。
std::string
之类的类来向/从用户传递字符串。升级您的编译器/库后,即使您自己的程序也可能会中断(因为它们的实现细节仅是:实现细节),更不用说非C++程序会遇到麻烦的事实。六年后更新:严格出于与其他语言之间的语言和ABI兼容性原因,而不是C++程序开发的一般建议。如果您要进行C++开发,跨平台或其他方式,请使用STL!即仅在您需要使用其他语言调用代码时才遵循此建议。
malloc
或可以使用new
或free
释放delete
,但通常无法使用。)笔记:
只是为了澄清一下,“让用户分配缓冲区”和“使用以NULL终止的字符串”不会互相冲突。您仍然需要从用户那里获取缓冲区长度,但是在终止字符串时要包括NULL。我的意思并不是说您应该创建类似于
scanf("%s")
的函数,这显然是不可行的危险-您仍然需要用户提供缓冲区长度。即执行Windows在这方面的几乎所有操作。关于c++ - 在跨平台C和C++ API中使用字符串的当前最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6832073/