Visual D调用std.file.readText读文件抛出特权指令异常如何解决
问题解决方法
你遇到的异常是readln()返回值的两个特性导致的,按照以下步骤修改即可正常运行:
- 导入
std.string工具库处理输入字符串 - 对
readln()的返回值做两步处理:- 调用
strip()去除首尾空白字符,重点是清除输入末尾附带的换行/回车符 - 调用
idup将可变的char[]转换为不可变的string类型,匹配readText的参数要求
- 调用
修改后的可运行代码
import std.stdio; import std.file; import std.string; // 新增导入,用于strip方法 void main() { while (true) { writeln("Enter a .asm file name: "); // 处理输入字符串:去首尾空白 + 转不可变字符串 auto asmFileName = readln().strip().idup; // 可选:增加空输入判断避免无效请求 if (asmFileName.length == 0) { writeln("文件名不能为空,请重新输入"); continue; } auto asmSource = readText(asmFileName); writeln("读取成功,文件长度:", asmSource.length); } }
异常原因说明
- 你直接传入字面量字符串时,路径完全匹配文件系统中的文件名,所以可以正常运行。
- 通过
readln()读取的输入默认会包含你按下回车时输入的换行符(Windows下为\r\n,类Unix下为\n),导致实际传入readText的文件名是"prog9.asm\r\n",和实际文件名不匹配,触发文件不存在的错误。 - D运行时遇到不可恢复的IO错误时,会主动触发
UD2非法指令终止程序,对应你看到的0xC0000096 特权指令异常。
内容的提问来源于stack exchange,提问作者UniversalBasicIncomeSupporter8
相关产品推荐
相关产品推荐

