Null终止字符数组vs字符串对象

时间:2015-08-13 08:16:21

标签: c++ c++11

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

我在想,任何正在索引并且尚未分配值的内存位置都已由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);

1 个答案:

答案 0 :(得分:6)

虽然std::string不一定存储'\0'(它是实现定义的),但operator[](size_type pos)会返回pos == size()的空字符。