What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
I know that the first uses the array notation, whereas the second uses
pointer notation. But apart from that what are the implications /
dangers, etc. if any. 8 3432
On Sun, 05 Oct 2008 12:13:13 -0700, bintom wrote:
What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
I know that the first uses the array notation, whereas the second uses
pointer notation. But apart from that what are the implications /
dangers, etc. if any.
As an initial pointer for you, see the C FAQ http://c-faq.com/decl/strlitinit.html
there are also other pointers there as well.
bintom wrote:
What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
I know that the first uses the array notation, whereas the second uses
pointer notation. But apart from that what are the implications /
dangers, etc. if any.
It's not just notation: string1 is an array of chars, while string2 is a
pointer to char. A string-literal, such as "C++ forum", denotes an
object of static duration. For this reason there's no danger in writing
e.g.:
char const * f()
{
return "something" ;
}
but the following is a recipe for disaster:
char const * f()
{
char const arr[] = "something" ;
return arr ; // DON'T DO THIS!
}
In your first example you use the static duration object just as a
source to initialize string1 (in fact, it is likely that the compiler
will optimize away that source), whereas in the second one you directly
point to it (its first character, actually; and it may be the same
string literal object of the first line, or not; the implementation must
document this). Since attempting to modify the object corresponding to a
string literal yields undefined behavior you should add const:
char const * string2 = "C++ forum" ;
Omitting the const is allowed for backward-compatibility but deprecated.
Of course, you can modify string1, instead.
--
Gennaro Prota | name.surname yahoo.com
Breeze C++ (preview): <https://sourceforge.net/projects/breeze/>
Do you need expertise in C++? I'm available.
On Oct 5, 10:13*pm, bintom <binoythomas1...@gmail.comwrote:
What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
I know that the first uses the array notation, whereas the second uses
pointer notation. But apart from that what are the implications /
dangers, etc. if any.
Hi bintom
Besides what Gennaro wrote, I can add two other differences:
1. size of string1 is 20, so as Gennaro mentioned the 10 last array
elements fill
with null character, but the size of *string2 is 10.
2. string2 is a pointer and it can points to elsewhere, but string1
can't.
Regards,
Saeed Amrollahi
On Oct 5, 8:13*pm, bintom <binoythomas1...@gmail.comwrote:
What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
I know that the first uses the array notation, whereas the second uses
pointer notation. But apart from that what are the implications /
dangers, etc. if any.
In the first case there is one object: an (initialised) array.
In the second case there are two objects: a string literal (which is a
char const[] array) and a pointer to it.
--
Max eb********@gmail.com wrote:
On Oct 5, 10:13 pm, bintom <binoythomas1...@gmail.comwrote:
>What are the differences between the following methods of declaring strings?
char string1[20] = "C++ forum"; char* string2 = "C++ forum";
<nitpick1>
This /defines/ strings.
</nitpick1>
[...]
1. size of string1 is 20, so as Gennaro mentioned the 10 last array
elements fill with null character, but the size of *string2 is 10.
<nitpick2>
The size of '*string2' is 1 (as it points to a 'char'). The size
of 'string2', OTOH, is the size of a 'char*' (4 on my system).
</nitpick2>
[...]
Saeed Amrollahi
Schobi
On Oct 6, 11:59*am, Hendrik Schober <spamt...@gmx.dewrote:
ebony.s...@gmail.com wrote:
On Oct 5, 10:13 pm, bintom <binoythomas1...@gmail.comwrote:
What are the differences between the following methods of declaring
strings?
char string1[20] = "C++ forum";
char* string2 = "C++ forum";
* <nitpick1>
* This /defines/ strings.
* </nitpick1>
[...]
1. size of string1 is 20, so as Gennaro mentioned the 10 last array
elements fill with null character, but the size of *string2 is 10.
* <nitpick2>
* The size of '*string2' is 1 (as it points to a 'char'). The size
* of 'string2', OTOH, is the size of a 'char*' (4 on my system).
* </nitpick2>
[...]
* Saeed Amrollahi
* Schobi
Sorry for some confusion. I mean in array case the size of string1 is
20, but in pointer case the size of
string literal which string2 points is 10 (9 bytes for "C++ forum" and
an additional byte
for '\0')
- Saeed Amrollahi
James Kanze wrote:
On Oct 5, 9:13 pm, bintom <binoythomas1...@gmail.comwrote:
>What are the differences between the following methods of declaring strings?
>char string1[20] = "C++ forum";
This declares an array of char, initialized with
{
'C', '+', '+', ' ', 'f',
'o', 'r', 'u', 'm', '\0',
'\0', '\0', '\0', '\0', '\0',
'\0', '\0', '\0', '\0', '\0'
} ;
Adding some historical information (usually a special quality of
yours:-), the fact that the last elements are initialized to zero was
clarified with C90's TC2.
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm>
(the fix to subclause 6.5.7). C++03 isn't in sync (i.e., it leaves the
case as uncertain as the original ISO C did) and, last time I checked,
the working draft isn't, either.
--
Gennaro Prota | name.surname yahoo.com
Breeze C++ (preview): <https://sourceforge.net/projects/breeze/>
Do you need expertise in C++? I'm available.
In article
<82**********************************@r15g2000prd. googlegroups.com>,
Saeed Amrollahi <s_*********@yahoo.comwrote:
On Oct 6, 11:59*am, Hendrik Schober <spamt...@gmx.dewrote:
ebony.s...@gmail.com wrote:
On Oct 5, 10:13 pm, bintom <binoythomas1...@gmail.comwrote:
>What are the differences between the following methods of declaring
>strings?
>char string1[20] = "C++ forum";
>char* string2 = "C++ forum";
* <nitpick1>
* This /defines/ strings.
* </nitpick1>
[...]
1. size of string1 is 20, so as Gennaro mentioned the 10 last array
elements fill with null character, but the size of *string2 is 10.
* <nitpick2>
* The size of '*string2' is 1 (as it points to a 'char'). The size
* of 'string2', OTOH, is the size of a 'char*' (4 on my system).
* </nitpick2>
[...]
* Saeed Amrollahi
* Schobi
Sorry for some confusion. I mean in array case the size of string1 is
20, but in pointer case the size of
string literal which string2 points is 10 (9 bytes for "C++ forum" and
an additional byte
for '\0')
I disagree. For example,
const char* s1 = "012";
const char* s2 = "12";
s2 might equal s1+1 if the compiler shares the underlying character
array between the literals. In that case, s2 at the very least points to
the second element a 4-char array. I don't think you can really even
know the ultimate size of the underlying array (and thus what elements
can be accessed without invoking undefined behavior). There could even
be characters past the apparent end:
const char* s3 = "12\0Z"; //s3=s1+1 This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Philippe C. Martin |
last post by:
I apologize in advance for launching this post but I might get enlightment
somehow (PS: I am _very_ agnostic ;-).
- 1) I do not consider my intelligence/education above average
- 2) I am very...
|
by: Sergey Ilinsky |
last post by:
Well, I've been working with JS for three years and have a great
experience here.
But! I still have no really acceptable answer to the following
question:
What is the principle difference between...
|
by: arekkusu |
last post by:
Hello, I have the following problem:
when declaring hex data in C, you typically do something like:
const char = {0xde, 0xad, 0xbe, 0xef, 0x01, 0x02, 0x03, 0x04 ... };
This is quite verbose...
|
by: rtilley |
last post by:
s = ' qazwsx '
# How are these different?
print s.strip()
print str.strip(s)
Do string objects all have the attribute strip()? If so, why is
str.strip() needed? Really, I'm just curious......
|
by: Zytan |
last post by:
What is the difference between these two lines?
Dim args As Object() = New Object() {strText}
Dim args As Object() = {strText}
args seems usuable from either, say, like so:
...
|
by: edson |
last post by:
Greetings.
My microcontroller program uses arrays of strings. I want to store the
strings AND their pointers in ROM. I am able to initialize the arrays so
that the strings are put in ROM, but the...
|
by: Stefan Scholl |
last post by:
After an hour searching for a potential bug in XML parsing
(PyXML), after updating from 2.4 to 2.5, I found this one:
$ python2.5
Python 2.5 (release25-maint, Dec 9 2006, 14:35:53)
on...
|
by: Jim Johnson |
last post by:
what's the difference when declare a struct with typedef or NO
typedef?
================================
typedef struct {
.... etc
} SetupRecord;
|
by: JLORA3659 |
last post by:
dsPlcTagDataSet = new DataSet();
dsPlcTagDataSet.ReadXml(Application.StartupPath + "\\" + "PlcTag.xml");
in the xml file there is a row "iWord" that I need to sort later on but this row is...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM).
In this month's session, the creator of the excellent VBE...
|
by: MeoLessi9 |
last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....
|
by: DolphinDB |
last post by:
Tired of spending countless mintues downsampling your data? Look no further!
In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
|
by: Aftab Ahmad |
last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below.
Dim IE As Object
Set IE =...
|
by: marcoviolo |
last post by:
Dear all,
I would like to implement on my worksheet an vlookup dynamic , that consider a change of pivot excel via win32com, from an external excel (without open it) and save the new file into a...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: ArrayDB |
last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
| |