Dealing with strings copy
Part of ArraysCategory
Description
This example shows several ways to declare strings and how their copy is managed.
Example
import std.c.stdio; import std.string; int main(char[][] args) { char[] s = new char[4]; char[] s1; char[] s2; char[4] s3; char[] s4 = "hello"; char[6] s5 = "hello1"; s = "a"; printf("s = %.*s\n", s); // memory is automatically allocated s1 = "b"; printf("s1 = %.*s\n", s1); // in this way a reference is copied ... s2 = s4; printf("s2 = %.*s\n", s2); s4[3] = 'p'; s4[4] = '\0'; // ... and the string s2 IS modified too printf("s2 = %.*s\n", s2); // s3 = "c"; no: static strings cannot change references // but we can copy in them new values without worrying about dup (here we copy the first chars) // we must use slices to match the dimensions s3[] = s5[0..4]; s = s5; s1 = s5.dup; s5[3] = 'p'; s5[4] = '\0'; // static arrays will always have a copy of data printf("s3 = %.*s\n", s3); // in this case the reference IS changed printf("s = %.*s\n", s); // to avoid the previous behaviour we must duplicate the contents with dup printf("s1 = %.*s\n", s1); return 0; }
Comments
This example will produce a segmentation fault on Linux because string literals are read-only.
Source
Link | http://www.dsource.org/tutorials/index.php?show_example=150 |
Posted by | Anonymous |