Reputation: 58097
I'm doing a review of my first semester C++ class, and I think I missing something. How many bytes does a string take up? A char?
The examples we were given are, some being character literals and some being strings:
'n', "n", '\n', "\n", "\\n", ""
I'm particularly confused by the usage of newlines in there.
Upvotes: 20
Views: 115086
Reputation: 263350
#include <iostream>
int main()
{
std::cout << sizeof 'n' << std::endl; // 1
std::cout << sizeof "n" << std::endl; // 2
std::cout << sizeof '\n' << std::endl; // 1
std::cout << sizeof "\n" << std::endl; // 2
std::cout << sizeof "\\n" << std::endl; // 3
std::cout << sizeof "" << std::endl; // 1
}
NUL
terminator.\n
(line break) is only a single char and so is \\
(backslash). \\n
is just a backslash followed by n
.
Upvotes: 42
Reputation: 3260
'n'
: is not a string, is a literal char, one byte, the character code for the letter n."n"
: string, two bytes, one for n and one for the null character every string has at the end."\n"
: two bytes as \n stand for "new line" which takes one byte, plus one byte for the null char.'\n'
: same as the first, literal char, not a string, one byte."\\n"
: three bytes.. one for \, one for newline and one for the null character""
: one byte, just the null character.Upvotes: 12
Reputation: 39
Depends if using UTF8 a char is 1byte if UTF16 a char is 2bytes doesn't matter if the byte is 00000001 or 10000000 a full byte is registered and reserved for the character once declared for initialization and if the char changes this register is updated with the new value.
a strings bytes is equal to the number of char between "".
example: 11111111 is a filled byte, UTF8 char T = 01010100 (1 byte)
UTF16 char T = 01010100 00000000 (2 bytes)
UTF8 string "coding" = 011000110110111101100100011010010110111001100111 (6 bytes)
UTF16 string "coding" = 011000110000000001101111000000000110010000000000011010010000000001101110000000000110011100000000 (12 bytes)
UTF8 \n = 0101110001101110 (2 bytes)
UTF16 \n = 01011100000000000110111000000000 (4 bytes)
Note: Every space and every character you type takes up 1-2 bytes in the compiler but there is so much space that unless you are typing code for a computer or game console from the early 90s with 4mb or less you shouldn't worry about bytes in regards to strings or char.
Things that are problematic to memory are calling things that require heavy computation with floats, decimals, or doubles and using math random in a loop or update methods. That would better be ran once at runtime or on a fixed time update and averaged over the time span.
Upvotes: 0
Reputation: 5724
'n' - 0x6e
"n" - 0x6e00
'\n' - 0x0a
"\n" - 0x0a00
"\\n" - 0x5c6e00
"" - 0x00
Upvotes: 1
Reputation: 810
The following will take x consecutive chars in memory:
'n' - 1 char (type char)
"n" - 2 chars (above plus zero character) (type const char[2])
'\n' - 1 char
"\n" - 2 chars
"\\n" - 3 chars ('\', 'n', and zero)
"" - 1 char
edit: formatting fixed
edit2: I've written something very stupid, thanks Mooing Duck for pointing that out.
Upvotes: 6
Reputation: 57794
You appear to be referring to string constants. And distinguishing them from character constants.
A char
is one byte on all architectures. A character constant uses the single quote delimiter '
.
A string is a contiguous sequence of characters with a trailing NUL character to identify the end of string. A string uses double quote characters '"'.
Also, you introduce the C string constant expression syntax which uses blackslashes to indicate special characters. \n
is one character in a string constant.
So for the examples 'n', "n", '\n', "\n"
:
'n'
is one character
"n"
is a string with one character, but it takes two characters of storage (one for the letter n
and one for the NUL
'\n'
is one character, the newline (ctrl-J on ASCII based systems)
"\n"
is one character plus a NUL.
I leave the others to puzzle out based on those.
Upvotes: 1
Reputation: 67345
The number of bytes a string takes up is equal to the number of characters in the string plus 1 (the terminator), times the number of bytes per character. The number of bytes per character can vary. It is 1 byte for a regular char
type.
All your examples are one character long except for the second to last, which is two, and the last, which is zero. (Some are of type char
and only define a single character.)
Upvotes: 2
Reputation: 66981
'n'
-> One char
. A char
is always 1 byte. This is not a string.
"n"
-> A string literal, containing one n
and one terminating NULL char
. So 2 bytes.
'\n'
-> One char
, A char
is always 1 byte. This is not a string.
"\n"
-> A string literal, containing one \n
and one terminating NULL char
. So 2 bytes.
"\\n"
-> A string literal, containing one \
, one '\n', and one terminating NULL char
. So 3 bytes.
""
-> A string literal, containing one terminating NULL char
. So 1 byte.
Upvotes: 2
Reputation: 62995
char
, by definition, takes up one byte.'
are char literals; literals using "
are string literals.\
is the escape character and \n
is a newline character.Put these together and you should be able to figure it out.
Upvotes: 8