我想像数组一样构造一个std :: string对象:
std::string str("");
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
std::cout<<str;
但它不会打印字符串。我错过了什么?
答案 0 :(得分:9)
首先,std::string
不是C字符串。您不需要NULL终止它。其次,[]
运算符仅对< std::string::length()
的索引有效,这意味着必须事先分配N个元素才能访问0
和{{1}之间的元素}。
N-1
编辑:但也请看Johnsyweb's answer。 std::string str(4); // construct a string of size 4
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
std::cout << str;
优于C字符串的一大优势是您不必担心内存分配。您可以使用std::string
运算符或+=
成员函数,并且可以逐个字符地构建字符串,而无需担心要保留多少内存。
答案 1 :(得分:4)
尝试
std::string (4, ' ');
而不是
std::string("");
basic_string的operator []返回对指定字符的引用,但由于您的字符串为空,因此它不包含任何字符。
答案 2 :(得分:2)
答案 3 :(得分:1)
您将字符串分配为“”,即长度恰好为0个字节。
然后你试图在字符串的边界之外写字符 - 这不起作用。
答案 4 :(得分:-1)
你应该在内存中为你的数组创建一个空间
using namespace std;
char str[5];
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
cout << str ;