#include
#include
int main(int argc, char *argv[])
{
cout << "size of String " << sizeof( string );
A string
object contains a pointer to a buffer on the heap that contains the actual string data. (It can also contain other implementation-specific meta-information, but yours apparently doesn't.) So you're getting the size of that pointer, not the size of the array it points to.
I know a lot of people had answered your question, but here are some points:
string
or the capacity of the string, this value represents the structural size of the class string
, which you can see by its implementation (and it can change from implementation to implementation) that is a simple pointer;sizeof(string)
is the size of the class structure, you'll get the size of the only internal pointer, that in your case is 4 bytes (because you are in a 32-bit machine, this can change from platform to platform too);string
class, points to a memory buffer where the class will hold the real string data, this memory buffer is reallocated as needed, it can increase/decrease as you append/delete/create more string text;size()
method from the class which will check the memory buffer string size (which isn't the same as the memory buffer size).I think your problem is your conception of sizeof
, see more information here and here is some explanation on how it works.
Not at all. It means that the class's structure is that, it doesn't include the dynamic memory it can control. std::string will expand dynamically to meet any required size.
s.max_size() // will give the true maximum size
s.capacity() // will tell you how much it can hold before resizing again
s.size() // tells you how much it currently holds
The 4 you get from sizeof
is likely a pointer of some kind to the larger structure. Although some optimizations on some platforms will use it as the actual string data until it grows larger than can fit.
When string
is defined as:
char *string;
sizeof(string)
tells you the size of the pointer. 4 bytes (You're on a 32-bit machine.) You've allocated no memory yet to hold text. You want a 10-char string? string = malloc(10); Now string points to a 10-byte buffer you can put characters in.
sizeof(*string)
will be 1. The size of what string is pointing to, a char.
If you instead did
char string[10];
sizeof(string)
would be 10. It's a 10-char array.
sizeof(*string)
would be 1 still.
It'd be worth looking up and understanding the __countof macro.
Update: oh, yeah, NOW include the headers :) 'string' is a class whose instances take up 4 bytes, that's all that means. Those 4 bytes could point to something far more useful, such as a memory area holding more than 4 characters.
You can do things like:
string s = "12345";
cout << "length of String " << s.length();
sizeof(char)
is always 1 byte. A byte
which we think is 8-bits need not be the case
. There are architectures where a BYTE is 32-bits, 24-bits and so on. The sizeof
applied to any other type is in multiples of sizeof(char)
which is by definition 1
.
The next important thing to note is that C++ has three character types: plain char, signed char and unsigned char
. A plain char
is either signed
or unsigned
. So it is wrong to assume that char can have only values from 0 to 255. This is true only when a char is 8-bits, and plain char
is unsigned
.
Having said, that assuming that 'string' is 'std::namespace'
, sizeof(string) == 4
means that the sizeof the 'std::string'
class is 4 bytes. It occupies 4 times the number of bytes that a 'char'
on that machine takes. Note that signed T, unsigned T always have the same size
. It does not mean that the actual buffer of characters (which is called string in common parlance) is only 4 bytes. Inside the 'std::string'
class, there is a non static member pointer which is allocated dynamically to hold the input buffer. This can have as many elements as the system allows (C++ places no restriction on this length). But since the 'std::string'
class only holds the pointer to this potentially infite length buffer, the sizeof(std::string) always remains the same as sizeof pointer on the given architecture which on your system is 4.
you can also use strings and can find out its length by string.length() function. look at the below code:
// Finding length of a string in C++
#include<iostream>
#include<string>
using namespace std;
int count(string);
int main()
{
string str;
cout << "Enter a string: ";
getline(cin,str);
cout << "\nString: " << str << endl;
cout << count(str) << endl;
return 0;
}
int count(string s){
if(s == "")
return 0;
if(s.length() == 1)
return 1;
else
return (s.length());
}
you can get the details from : http://www.programmingtunes.com/finding-length-of-a-string-in-c/