gpt4 book ai didi

C++ 字符串 != 字符串

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:42 27 4
gpt4 key购买 nike

我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。

int main(int argc, char *argv[])
{
HANDLE hConsole;
int k = 5;
string h;
string password = "pass";

hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, k);
SetConsoleTextAttribute( GetStdHandle( STD_INPUT_HANDLE ), 0x5B );

while (h != password)
{
printf("This PC is locked\nEnter the password to gain access\n");
scanf("%s", &h);
}

printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}

每当我运行它时,它都会让我输入密码,当我点击回车时,它会确认,然后崩溃,要求我调试或向 Microsoft 发送信息。这是在我添加 while 循环检查两个字符串时开始的。我是否正确执行了此操作,还是遗漏了什么?

以防万一不清楚。我希望程序将字符串与输入进行比较,如果它们相同,程序将结束。

感谢您的关注。

最佳答案

您根本无法使用 scanf()读入 std::string。这是因为 scanf() 是 C API 的一部分,它不支持非 POD 类型。在那里,%s 格式说明符需要一个指向字符数组的指针,其大小足以容纳该值(您不能真正保证这一点,这就是为什么 scanf() 甚至被认为是有害的)而你向它传递了一个指向 std::string 类型对象的指针(这与普通数组相差甚远)。一个好的编译器甚至会在这种情况下发出警告(如果不是错误,因为非 POD 类型不能通过 va_list 传递)。为什么不读入字符数组(C 方式),或者使用 std::cin而不是 std::cin >> h;?

关于C++ 字符串 != 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com