Altering memory directly with C is easy; can it be done in C#?

FrancineTaylor
FrancineTaylor used Ask the Experts™
on
I started thinking about how to make applications more secure, and a question popped into my head.  I've looked into working with unsafe pointers in C#, but mostly that just deals with the reading of information.

Given this piece of code:

string a = "one";
string b = a;
ChangeTheMiddleLetter(b, 'X');
MessageBox.Show(a);
ChangeTheMiddleLetter(b, 'n');
MessageBox.Show(a);


Could you code ChangeTheMiddleLetter such that the message box would show "oXe" the first time and "one" the second?

In other words, assuming that a and b both point to the same memory location, could you alter one character of what is being pointed to without altering the pointer address?  Or is that no longer possible with managed code?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Aaron JabamaniTechnical Architect

Commented:
The same functionality can be done by c sharpstring methods . Why you want do using pointers?
Naman GoelPrincipal Software engineer

Commented:
Yes agreed with apeter

Unsafe string manipulation is inherently incorrect. .NET strings aren't supposed to be edited, and it's most likely that there is code in the framework that is built around the assumption that a string will never change. Anything that relies on String.GetHashCode() comes immediately to mind, but there might be behind-the-scenes optimizations or sanity checks. Presumably it's something like that can cause the CLR error.

If you're finding, after profiling, that .NET's immutable string implementation does not fit your needs, the easiest mutable alternative that would let you modify its length is a List<char>.
Commented:
You are talking about using 'unsafe' code whi ch is frowned upon but sometimes cannot be avoided. In answer to your question, yes you can. :)

Take a look at http://msdn.microsoft.com/en-us/library/t2yzs44b.aspx for some info.

Manipulating strings in this way might or might not work. This is due to the fact that strings are not fixed in memory but can change location runtime. A pointer therefor might point to something you did not anticipate.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial