Unexpected behaviour using remove on char[]

Ali Çehreli acehreli at yahoo.com
Sun Oct 25 21:02:30 UTC 2020


On 10/25/20 12:29 PM, IGotD- wrote:

> What I discovered is that remove doesn't really remove size number of 
> bytes but also removed entire multibyte characters and consider that one 
> step. The result was of course that I got out of bounds exceptions as it 
> went past the end.

This is the infamous "auto decode" at work.

> When I changed char[] to ubyte[] my code started to work correctly again.

Instead of changing the type, you can temporarily treat them as ubyte[] 
with std.string.representation:

import std.stdio;
import std.string;

void print(R)(R range) {
   writefln!"%-(%s, %)"(range);
}

void main() {
   auto s = "abcçd".dup;
   print(s);
   print(s.representation);
}

Prints:

a, b, c, ç, d
97, 98, 99, 195, 167, 100

Ali



More information about the Digitalmars-d-learn mailing list