On Oct 8, 3:21 pm, polas <n...@helpforce.comwrote:
Good morning,
I have a quick question to clear up some confusion in my mind. I
understand that using a string literal in a declaration such as char
*p = "string literal" declares a pointer to memory holding the string
and the string might very well be held in read only memory.
However, I am sure that I read somewhere that the declaration char a[]
= "string literal", even though a is an array (and I understand the
differences between the two declarations), defines a such that it
might also be also held in read only memory and thus writing to
indexes of a might not work...
After some doubt about this popped into my mind, I have had a look
through the C faq and it seems to suggest that I am wrong - in the
second case one can use the array declared as above as normal, but I
would like to make sure.
Example -
char *i_reg_fname = "none";
String constants are sequences of characters enclosed in double
quotes.
String literal is the formal term for a double-quoted string in C
source. 'i_reg_fname' is a pointer to characters.
Here,
Note that any attempt to modify the string that 'i_reg_fname' points
to will result in undefined behaviour.
that is, i_reg_fname[0]='q'; // not allowed . will cause undefined
behaviour. :(
Some compilers have a switch controlling whether string literals are
writable or not (for compiling old code),
and some may have options to cause string literals to be formally
treated as arrays of const char (for better error catching).
But irrespective of theat, if you have declared as below , then it is
possible to change.
char i_reg_fname[] = "none";
that is, i_reg_fname[0]='q'; // allowed . :)
i_reg_fname is a non-const pointer to char.
It may point to a string literal, but it isn't declared const.
An attempt to modify it will cause undefined behaviour .
Attempting to modify a string literal invokes undefined
behavior, because the C standard defines that attempting to modify a
string literal invokes undefined behavior.
It is because of the C standard and it is not 'const'.
In actual practice, the behaviour depends on where the compiler
decides to put its string constants. Some compilers have a switch
controlling whether
string literals are writable or not (for compiling old code),and some
may have options to
cause string literals to be formally treated as arrays of const char
(for better
error catching).
Earlier C didn not have the 'const' keyword, so if you wanted to
pass
a string literal to a particular function( In sucha a way that the
string will
not be modified inside the
function), then that particular function must take a 'char*'
argument.
Thats all.
Lot of information is available regarding this String Literal in
internet and groups. Also read the C-Faq (question 1.32 will give you
enough info).
Refer :-
http://groups.google.co.in/group/com...3a3e04/?hl=en#
Karthik Balaguru