C++ 字符数组参数在 x86 编译时包含奇怪的字符
C++ char-array parameter contains weird characters on x86 compile
我是 C++ 的新手,我必须实现 Polybius 密码函数。
我将一个 char c 数组作为参数传递给我的函数。
我使用了一个 "PROG" 的虚拟字符串来测试代码,当我在 x64 中编译它时它工作得很好(由于某种原因,它被 Visual Studio 2015 设置为默认值)。但是,如果我将数组传递给 x86 构建中的函数,它会毫无理由地包含奇怪的字符:
"PROG\x190§ÎæÏX1"
这是我的代码:
void createPolybiusMatrix(const char keyphrase[]) {
//Keyphrase contains "PROG" on x64 but "PROG\x190§ÎæÏX1" on x86!
//Do Stuff
}
int main() {
char passphrase[] = {'P','R','O','G'};
//Everythings fine here, passphrase contains "PROG" on both platforms.
createPolybiusMatrix(passphrase);
return 0;
}
有什么想法吗?我对 C++ 还是很陌生,这让我很困惑!?
C 字符串需要以 null 结尾。为了让你的程序正常运行,你需要使用:
char passphrase[] = {'P','R','O','G','[=10=]'};
char 数组不是以 null 结尾的,所以如果 'G'
后面的字节不为 0,就会溢出并打印出垃圾。这是技术上未定义的行为。
要像打印字符串一样打印 char 数组,您需要以 null 终止它。
我是 C++ 的新手,我必须实现 Polybius 密码函数。 我将一个 char c 数组作为参数传递给我的函数。 我使用了一个 "PROG" 的虚拟字符串来测试代码,当我在 x64 中编译它时它工作得很好(由于某种原因,它被 Visual Studio 2015 设置为默认值)。但是,如果我将数组传递给 x86 构建中的函数,它会毫无理由地包含奇怪的字符: "PROG\x190§ÎæÏX1"
这是我的代码:
void createPolybiusMatrix(const char keyphrase[]) {
//Keyphrase contains "PROG" on x64 but "PROG\x190§ÎæÏX1" on x86!
//Do Stuff
}
int main() {
char passphrase[] = {'P','R','O','G'};
//Everythings fine here, passphrase contains "PROG" on both platforms.
createPolybiusMatrix(passphrase);
return 0;
}
有什么想法吗?我对 C++ 还是很陌生,这让我很困惑!?
C 字符串需要以 null 结尾。为了让你的程序正常运行,你需要使用:
char passphrase[] = {'P','R','O','G','[=10=]'};
char 数组不是以 null 结尾的,所以如果 'G'
后面的字节不为 0,就会溢出并打印出垃圾。这是技术上未定义的行为。
要像打印字符串一样打印 char 数组,您需要以 null 终止它。