学习d并彻底享受过程,但这段代码转换成一个d字符串char*
我百思不得其解。我无意中发现它的只是一味的直觉模板是如何工作的,但我想知道它是如何工作转换d字符串为char *使用模板
import core.stdc.stdio;
import core.stdc.string;
import core.stdc.stdlib;
extern (C):
/// Convert a string to a char array
template charify(const string str, const size_t length) {
void charify(char* arr) {
foreach(i; 0 .. str.length) {
if (i >= length) {
break;
}
arr[i] = str[i];
}
}
}
int main() {
auto k = cast(char*)malloc(4 * char.sizeof);
charify!("abcdef", 3)(k);
printf("%s %d\n", k, strlen(k));
return 0;
}
输出,我想到的是abc 3
,但我真的不知道为什么。谁能解释一下?
如果你没有意识到,Phobos有一个功能可以做到这一点,称为toStringz(并从StringZ走另一条路)。它确实使用了GC,但这也是我的做法。无需模板。 https://github.com/dlang/phobos/blob/master/std/string.d#L243 –
你应该也可以在那里做一个数组拷贝而不是循环:'arr [0 .. len ] = str [0 .. len];'然后'arr [len] = 0;'终止它。虽然请注意,字符串文字也可以像C字符串一样工作,所以不需要对它们做任何特殊的处理。 –