我刚刚开始阅读C++,发现C++具有C语言所没有的丰富的字符串操作函数.我正在读这些函数,遇到了c_str(),从我理解的是,c_str将一个可能是NULL结尾的字符串,也可能不是NULL结尾的字符串,转换成NULL结尾的字符串,这是真的吗?

有没有人能给我举一些例子,让我了解一下c_str函数的用法?

推荐答案

c_str返回指向以null结尾的字符串(即C样式字符串)的const char*.当您希望将std::string的"内容"1传递给希望使用C样式字符串的函数时,它很有用.

例如,请考虑以下代码:

std::string string("Hello world!");
std::size_t pos1 = string.find_first_of('w');

std::size_t pos2 = static_cast<std::size_t>(std::strchr(string.c_str(), 'w') - string.c_str());

if (pos1 == pos2) {
    std::printf("Both ways give the same result.\n");
}

100.

注:

?这并不完全正确,因为std::string(与C字符串不同)可以包含\0字符.如果是这样,则接收返回值c_str()的代码将被误认为字符串比实际长度短,因为它会将\0解释为字符串的末尾.

C++相关问答推荐

如果实际的syscall是CLONE(),那么为什么strace接受fork()呢?

C中的__attributor__((aligned(4),packed))与 struct 的用法

将 typewriter LF打印到Windows终端,而不是隐含的CR+LF

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

将指针作为参数传递给函数

无法用C++编译我的单元测试

为什么删除CAP_DAC_OVERRIDE后创建文件失败?

我无法让LLDB正确运行我的可执行文件

struct -未知大小

如何在VS 2022中正确安装额外的C头文件

Wcstok导致分段故障

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

在Ubuntu上使用库部署C程序的最佳实践

将char*铸造为空**

函数指针作为函数参数 - 应该使用 const 吗?

为什么 C 字符串并不总是等同于字符数组?

Codewars Kata 掷骰子的不稳定行为

C 编译器编写中register关键字的用处

从控制台读取时,Linux相当于WaitForSingleObject?