gpt4 book ai didi

c++ - NSString 弱持有 std::string 的 const char *

转载 作者:太空狗 更新时间:2023-10-29 21:50:14 25 4
gpt4 key购买 nike

NSString 弱包含属于 std::string 的 const char * 的最安全方法是什么?下面的两个示例都在一个简单的测试中工作,在日志中,并在 NSTableView 中呈现,但我担心会出现奇怪的行为。可能是 c_str() 的额外空字符被简单地忽略了(因为传递了 length 参数)并且两者都可以正常工作。

给定:

std::string const * stdstring = new std::string("Let's see if this works");

然后:

NSString * aStr = [[NSString alloc] initWithBytesNoCopy: 
stdstring->data() length: stdstring->length()
encoding:NSUTF8StringEncoding freeWhenDone:NO];

或:

NSString * aStr2 = [[NSString alloc] initWithBytesNoCopy: 
stdstring->c_str() length: stdstring->length()
encoding:NSUTF8StringEncoding freeWhenDone:NO];

还是别的?

最佳答案

initWithBytesNoCopy:length:... 的文档明确指出 length 将是使用的字节数,因此 null 终止字符将始终被忽略。因此data()c_str()返回的内存内容同样适用。

考虑到这一点:

std::stringdata()c_str() 函数返回的内存的生命周期保证是相同的 - 它们将继续存在,直到您在字符串对象上调用非常量成员函数。这取决于内部数据结构是否已经是一个空终止字符数组的实现,所以一般来说,data() 会比 c_str() 更便宜或在复杂性上相同>。因此,我会选择 data()

关于c++ - NSString 弱持有 std::string 的 const char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6528223/

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