3

为什么下面的小示例在 Linux64 下失败而在 Windows32 下失败?

module test;

import std.string, std.stdio;

void main(string[] args)
{
    string a = "abcd=1234";
    auto b = &a;
    auto Index = indexOf(*b, '=');

    if (Index != -1)
        *cast (char*) (b.ptr + Index) = '#';

    writeln(*b);
    readln;
}
4

1 回答 1

6

要记住的一件事是这string是一个别名,(immutable char)[]这意味着尝试写入元素是未定义的行为

我认为行为不同的原因之一是在 linux64 下,编译器将字符串数据放在写保护的内存中,这意味着*cast (char*) (b.ptr + Index) = '#';失败(静默或使用 segfault)

于 2013-03-25T09:34:40.923 回答