C++字符数组参数在x86编译中包含奇怪的字符

C++ char-array parameter contains weird characters on x86 compile

本文关键字:字符 包含奇 编译 x86 数组 参数 C++      更新时间:2023-10-16

我对C++很陌生,我必须实现Polybius密码函数。我向函数传递了一个字符c数组作为参数。我使用了一个伪字符串"PROG"来测试代码,当我在x64中编译它时,它运行得很好(由于某种原因,Visual Studio 2015将其设置为默认值)。然而,如果我将数组传递给x86构建中的函数,它会包含一些奇怪的字符,原因并不明显:"PROG\x190§岛X1"

这是我的代码:

void createPolybiusMatrix(const char keyphrase[]) {
    //Keyphrase contains "PROG" on x64 but "PROGx190§ÎæÏ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',''};

char数组不是以null结尾的,所以如果'G'后面的字节不是0,则会溢出并打印出垃圾。这在技术上是未定义的行为。

要像打印字符串一样打印char数组,需要对其进行null终止。