通过两种不同的方法显示不同大小的字符串

时间:2016-10-24 03:10:41

标签: c++ string

当我这样做时:

string s="hello";
cout<<sizeof(s);

然后它显示4作为答案,但是当我找到一些单独的值时:

string s="hello";
cout<<sizeof(s[2]);

它显示1作为输出。通过这个输出,1st的答案应该是5,因为字符串中有五个字符。我哪里错了? (我在Ideone上运行了这个。)

2 个答案:

答案 0 :(得分:0)

sizeof operator给出了给定类型或表达式占用的内存(以字节为单位)。对于原始类型,这很简单。对于类/结构,它返回结构本身的字段占用的字节数,不一定是指向数据;它对于该类型的每个实例都是相同的。

另见this answer

<强>示例:

sizeof(char) // 1
sizeof(9001) // sizeof(int), usually 4

struct mystring {
    const char* data;
};

mystring foo = {"foo"};
sizeof(mystring) // probably sizeof(const char*), depending on packing; let's say 4
sizeof(foo)      // will always be same as above; 4
foo.data = "cornbread is tasty";
sizeof(foo)      // the struct itself still takes up the same amount of space; 4

答案 1 :(得分:0)

sizeof()返回指定参数的类型编译时字节大小。

s变量是std::string类的实例,因此sizeof(s)返回std::string类本身的字节大小,在32位中为4可执行文件(64位可执行文件中的8),因为std::string类包含单个数据成员,该成员是指向已分配字符数据的指针。如果您想知道运行时为字符串分配了多少个字符,请改用std::string::size()方法。这将返回你正在寻找的5。

s[2]返回char,因此sizeof(s[2])会返回char类型的字节大小,即1。