空终止字符数组与字符串对象 我是C++的新手,我非常关注字符数组和字符串对象。我了解到字符数组是以字符'\0'为空终止的,字符串对象不是以空终止的,除非您使用了字符串库的成员函数c_str()。这里我有一些代码,我希望我的第一个循环永远运行,但是它们都迭代了大约6次。请原谅我糟糕的变量名称,但是有人能向我解释为什么string对象不会导致无限循环吗

空终止字符数组与字符串对象 我是C++的新手,我非常关注字符数组和字符串对象。我了解到字符数组是以字符'\0'为空终止的,字符串对象不是以空终止的,除非您使用了字符串库的成员函数c_str()。这里我有一些代码,我希望我的第一个循环永远运行,但是它们都迭代了大约6次。请原谅我糟糕的变量名称,但是有人能向我解释为什么string对象不会导致无限循环吗,c++,c++11,C++,C++11,我在想,任何被索引到的内存位置,如果没有被赋值,都已经用char'\0'表示了。如果是这样,请让我知道 std::string is_terminated = "string"; char is_t[] = "string"; int i = 0; while (is_terminated[i] != '\0') { std::printf("Element at index %d is %c\n", i, is_terminated[i]); i++; } std::prin

我在想,任何被索引到的内存位置,如果没有被赋值,都已经用char
'\0'
表示了。如果是这样,请让我知道

std::string is_terminated = "string";
char is_t[] = "string";

int i = 0;
while (is_terminated[i] != '\0') {
    std::printf("Element at index %d is %c\n", i, is_terminated[i]);
    i++;
}
std::printf("Times ran: %d\n", i);

int j = 0;
while (is_t[j] != '\0') {
    std::printf("Element at index %d is %c\n", j, is_t[j]);
    j++;
}
std::printf("Times ran: %d\n", j);

虽然
std::string
不一定存储
'\0'
(它是由实现定义的),但是如果
pos==size()

则返回空字符,您如何确保
std::string
实际上没有在末尾存储
'\0'
?它不是实现定义的吗?@Mikhail你是对的;我指的是公共接口。@Mikhail:从概念上讲,它没有被存储,因为所有的“序列容器操作”(例如,通过
begin()
/
end()
对字符串进行迭代,通过
push_back
等方式添加字符)的行为“就好像
\0
不存在一样。@MatteoItalia,当然,从概念上讲,但实际上我写了:)我不确定,到底发生了什么,我不知道这个空字符是否保留在字符串的末尾。至少我希望
std::string
总是有足够的容量在调用
c_str()
@BoPersson:
*(&s[0]+s.size())