Constant strings (Was: Re: what does 9013 have that 9005 lacks)
Bjorn Engsig
bengsig at oracle.nl
Wed May 9 18:37:36 AEST 1990
I'm sorry, but it is not correct when steve at qe2.UUCP (Steve DeJarnett) says:
[as a followup to why char *dummy="string"; dummy[0]='S'; segm violates]
|If you want to get around this,
|change the definition/declaration from char *dummy="string" to
|char dummy[]="string". Not much difference, but just enough for ANSI.
As I pointed out in another followup, constant strings should not be
modified according to ANSI. The precise wording in K&R2 (A2.6) is that the
behaviour of modifying a string literal is implementation defined.
char *dummy1 = "string1";
char dummy2[] = "string2";
dummy1[0] = 'S'; /* violates ANSI by trying to change 's' in "string1" */
dummy2[1] = 'T'; /* violates as well trying to chage 't' in "string2" */
dummy1 = "new1"; /* is OK, since it changes the char pointer dummy1, but
after doing it, the string "string1" cannot be
accessed any longer using dummy1 */
strcpy(dummy2,"new2"); /* violates, since you try to overwrite "string2" */
The xlc compiler for AIX 3.1 can be given the option -qnoro to put string
literals into the data-segment, and then they can be modified.
Please continue this discussion in comp.lang.c if necessary.
--
Bjorn Engsig, Domain: bengsig at oracle.nl, bengsig at oracle.com
Path: uunet!mcsun!orcenl!bengsig
More information about the Comp.unix.aix
mailing list