modifying the char*

Aug 26, 2012 at 3:11pm
hi everyone here is the code
1
2
   char* a = "aaa";
   *a++ = 'd'; // run time error occurs but no compiler error!! 


could you describe why i can't change the value of a?? and if i can how?

thanks!!
Last edited on Aug 26, 2012 at 3:17pm
Aug 26, 2012 at 3:26pm
String literals are constant, you cannot change them. The compiler should give you a warning on the first line.
This is the correct variant:

1
2
string a="aaa";
a[0]='d';
Aug 26, 2012 at 3:30pm
String literals are stored in a read-only data segment of the binary. So the runtime error is because you're trying to change something you aren't supposed to.

There's no compiler error as you are, unfortunately, allowed to assign a non-const char* to point at a literal to support legacy code. Ideally your compiler should warn you about this!

To avoid the probem, store your string in a buffer.

1
2
3
char buffer[16] = "aaa"; // copy "aaa" into a buffer of 16 chars
char* a = buffer;
*a++ = 'd'; 


Andy

PS Is you code in a .cpp file?
Last edited on Aug 26, 2012 at 3:34pm
Aug 26, 2012 at 3:32pm
thank you, but i'm going to push it little further,
you said that it's a constant ok i get it. is there anyway to break it constness
such as cons_cast, if we can't could you describe it??

thank you!!

thank you andy for the information then i mark it solved!!

PS yes it is a .cpp file :)
Last edited on Aug 26, 2012 at 3:37pm
Aug 26, 2012 at 3:37pm
is there anyway to break it constness

No. But you can copy it, which is what string does.
Aug 26, 2012 at 3:40pm
i get it now..

thank you again guys!! i'll mark it solved
Topic archived. No new replies allowed.