如何解决尝试循环打印字符串时出现段错误
我目前正在学习Zig(对C的经验很少),并且正在对字符串进行一些实验,以确保我正确地理解了这个概念。
例如,由于字符串是{
"name": "terior-api","version": "0.0.1","description": "","author": "","private": true,"license": "UNLICENSED","scripts": {
"prebuild": "rimraf dist","build": "nest build","format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","start": "nest start","start:dev": "nest start --watch","start:debug": "nest start --debug --watch","start:prod": "node dist/main","lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test": "jest","test:watch": "jest --watch","test:cov": "jest --coverage","test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e": "jest --config ./test/jest-e2e.json"
},"dependencies": {
"@nestjs/common": "^7.0.0","@nestjs/config": "^0.5.0","@nestjs/core": "^7.0.0","@nestjs/jwt": "^7.1.0","@nestjs/passport": "^7.1.0","@nestjs/platform-express": "^7.0.0","@nestjs/typeorm": "^7.1.0","@types/bcrypt": "^3.0.0","@types/cookie-parser": "^1.4.2","@types/joi": "^14.3.4","bcrypt": "^5.0.0","class-validator": "^0.12.2","cookie-parser": "^1.4.5","joi": "^17.2.0","MysqL": "^2.18.1","passport": "^0.4.1","passport-jwt": "^4.0.0","reflect-Metadata": "^0.1.13","rimraf": "^3.0.2","rxjs": "^6.5.4","typeorm": "^0.2.25","yarn": "^1.22.5"
},"devDependencies": {
"@nestjs/cli": "^7.0.0","@nestjs/schematics": "^7.0.0","@nestjs/testing": "^7.0.0","@types/express": "^4.17.3","@types/jest": "25.2.3","@types/node": "^13.9.1","@types/supertest": "^2.0.8","@typescript-eslint/eslint-plugin": "3.0.2","@typescript-eslint/parser": "3.0.2","eslint": "7.1.0","eslint-config-prettier": "^6.10.0","eslint-plugin-import": "^2.20.1","jest": "26.0.1","prettier": "^1.19.1","supertest": "^4.0.2","ts-jest": "26.1.0","ts-loader": "^6.2.1","ts-node": "^8.6.2","tsconfig-paths": "^3.9.0","typescript": "^3.7.4"
},"jest": {
"modulefileExtensions": [
"js","json","ts"
],"rootDir": "src","testRegex": ".spec.ts$","transform": {
"^.+\\.(t|j)s$": "ts-jest"
},"coverageDirectory": "../coverage","testEnvironment": "node"
}
}
的数组,所以我发现可以使用以下代码来打印字符“ C”:
u8
然后我尝试进行循环以打印一些基本字符,其代码范围为33至126:
std.debug.print("{}",.{[_]u8{67}});
但是当我运行它时,会发生以下错误:
var i: u8 = 33;
while (i < 127) {
std.debug.print("{}",.{[_]u8{i}});
i += 1;
}
最奇怪的是,当我稍稍更改代码以创建一个保存Segmentation fault at address 0x202710
/home/cassidy/learning-zig/hello-world/src/main.zig:9:39: 0x22ae15 in main (main)
std.debug.print("{}",.{[_]u8{i}});
^
/snap/zig/2222/lib/zig/std/start.zig:272:37: 0x204b9d in std.start.posixCallMainAndExit (main)
const result = root.main() catch |err| {
^
/snap/zig/2222/lib/zig/std/start.zig:143:5: 0x2048df in std.start._start (main)
@call(.{ .modifier = .never_inline },posixCallMainAndExit,.{});
^
[1] 24766 abort (core dumped) ./main
数组的变量时,它就会按预期工作:
u8
返回:
var i: u8 = 33;
while (i < 127) {
const c = [_]u8{i};
std.debug.print("{}",.{c});
i += 1;
}
解决方法
询问Zig Discord之后,看来确实是一个错误。希望由于该语言仍在大量开发中而很快得到修复!
,您遇到的是一个错误,但是仍然可以打印字符
执行此操作的标准方法是使用{c}
打印字符(或一旦合并#6390,{u}
以将Unicode代码点打印为utf-8)
std.debug.print("{c}",.{i});
如果首先寻址,也可以用[_]u8{i}
打印,因此它是*const [1]u8
而不是[1]u8
std.debug.print("{}",.{&[_]u8{i}});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。