以下是三种实现方式:

方式一:

char* toCharPtr(string allStr) { if (allStr[$-1] == '\0') return cast(char*)allStr.ptr; else { char* charPtr = cast(char*)allStr.ptr; charPtr[allStr.length] = '\0'; return charPtr; } }

方式二:

char* toCharPtr(string allStr) { if (allStr[$-1] == '\0') return cast(char*)allStr.ptr; else { char* charPtr = cast(char*)malloc(allStr.length+1); memcpy(charPtr, allStr.ptr, allStr.length); charPtr[allStr.length] = '\0'; return charPtr; } }

方式三:

char* toCharPtr(string allStr) { if (allStr.ptr == __nullptr) // 空字符串 return cast(char*)allStr.ptr; else if (allStr.ptr >= __dmd_script_section_start && allStr.ptr < __dmd_script_section_end) // 存储在常量区 { char* charPtr = cast(char*)malloc(allStr.length+1); memcpy(charPtr, allStr.ptr, allStr.length); charPtr[allStr.length] = '\0'; return charPtr; } else if (allStr[$-1] == '\0') // 以'\0'结尾 return cast(char*)allStr.ptr; else // 不以'\0'结尾 { char* charPtr = cast(char*)malloc(allStr.length+1); memcpy(charPtr, allStr.ptr, allStr.length); charPtr[allStr.length] = '\0'; return charPtr; }

D语言怎样将字符串allStr转为char1allStr最后一个字符是否为0空字符如果是则直接转为c语言的char2否则在末尾端位置加0并返回char指针3判断allStr是否存储在常量区的如果是则复制到原来字符串复制到堆中并完成1和2要求我知道的castcharallstr这种方式不用发生复制性能比较高但需要判断几种情况比如是否以0结尾等情况给出您的完整代码有多种方式的话也都列出来

原文地址: https://www.cveoy.top/t/topic/fsuc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录