Is all this Invarient **** er... stuff, premature optimisation?
Me Here
p9e883002 at sneakemail.com
Mon Apr 28 03:28:05 PDT 2008
Janice Caron wrote:
> 2008/4/28 <p9e883002 at sneakemail.com>:
> > import std.string;
> >
> > int main( string[] args) {
> > char[] a = cast(char[])args[0].toupper();
>
> **** UNDEFINED BEHAVIOR ****
> (1) args might be placed in a hardware-locked read-only segment. Then
> the following line would fail
> (2) there might be other pointers to the string, which expect it never
> to change.
>
> > a[2..5] = "XXX";
> > a = cast(char[])tolower( cast(string)a );
> > writefln(a);
> > return 0;
> > }
> >
> > Finally. It works.
>
> But not necessarily on all architectures, because of the undefined
> behavior. This is how you do it without undefined behavior.
>
> import std.string;
>
> int main( string[] args) {
> string a = args[0].toupper();
> a = a[0..2] ~ "XXX" ~ a[5..$];
> a = a.tolower();
> writefln(a);
> return 0;
> }
fred
--
More information about the Digitalmars-d
mailing list