【发布时间】:2020-10-15 03:56:22
【问题描述】:
我正在处理一个网站上的编码问题,当我编译我的代码时,它给了我:
在抛出一个实例后调用终止 'nlohmann::detail::type_error' 什么(): [json.exception.type_error.316] 索引 0 处的无效 UTF-8 字节:0x81 中止退出状态 134
但是,当我在 Sublime 上编译时,它可以正常输出正确的输出。我使用 ASCII 值存储到字符串变量answer 的方式有什么问题吗?这是我的代码:
string caesarCypherEncryptor(string str, int key) {
string answer = "";
for(char letter : str) {
// if it goes over 'z': get amount pass 'z' and start at 'a'
if(letter + key > int('z')) {
// push back char into answer string
answer += ((letter + key) % int('z') + int('a'));
continue;
}
// else just add key from current position
answer += letter + key;
}
return answer;
}
int main() {
cout << caesarCypherEncryptor("mvklahvjcnbwqvtutmfafkwiuagjkzmzwgf", 7) << endl;
return 0;
}
【问题讨论】:
-
但是,当我在 Sublime 上编译时它工作得很好 -- 我没有看到任何程序。我看到了一个功能。
main函数、样本数据和对该函数的调用在哪里?这不是minimal reproducible example -
另外,
Sublime不是 C++ 编译器。它是一个代码编辑器和一个 IDE。 -
char是有符号还是无符号取决于编译器。有符号整数类型的算术溢出会导致未定义的行为。如果char已签名,则例如'z' + 7将溢出。如果您明确指定无符号(如unsigned char letter),会有什么行为? -
我得到了与 unsigned char letter 相同的结果
-
请再次阅读错误信息。它说什么?从哪里报道?当您有一个不是有效 UTF-8 字符的字符,然后尝试将其作为 UTF-8 字符传递时,您认为会发生什么?请记住,ASCII 字母表是 七 位编码系统,而 UTF-8 使用 ASCII 作为前 127 个字符。
0x80以上的字符值作为单个字符无效。
标签: c++ compiler-errors runtime-error