學習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字符串一樣工作,所以不需要對它們做任何特殊的處理。 –