错误c++ | ISO c++禁止数组赋值

Error C++ | ISO C++ forbids assignment of arrays

本文关键字:c++ 数组 赋值 禁止 ISO 错误      更新时间:2023-10-16

我有一个解决不了的问题。如果此查询的回答为"yes",则应该anrede = female。

Dev++给了我这个错误:ISO c++禁止赋值数组


char anrede[10];
printf("Anrede: female?? Yes/No");
scanf("%s", &anrede);
if(anrede == "Yes"){
    anrede = "female";
} else{
    anrede = "male";
}

有人能帮帮我吗?

你的代码是C代码,C对初学者来说很难。c++更简单:

#include <iostream>
#include <string>
std::string anrede;
cout << "Anrede: female?? Yes/No";
std::getline(cin, anrede);
if(anrede == "Yes"){
    anrede = "female";
} else{
    anrede = "male";
}

考虑到您的示例实际上是C语言,trojanfoe的优秀答案可能不太适合您,在这种情况下,您需要的是strcpy()和strcmp():

char anrede[7]; // increase to 7 to leave room for "female" plus the null byte
printf("Anrede: female?? Yes/No");
scanf("%6s", &anrede); // restrict read length to 6 chars + the null bute
if (strcmp(anrede, "Yes") == 0){
    strcpy(anrede, "female");
} else {
    strcpy(anrede, "male");
}

但是如果你可以避免的话,你真的不想这样做。Strcpy()不知道缓冲区的大小,所以它会很高兴地在目标数组的末尾运行,要么破坏程序的数据,要么立即崩溃。Strncpy()是一个带最大长度参数的不错选择,但它并不总是可用。

我会使用trojanfoe发布的标准c++解决方案,除非您确实需要用C编写(在这种情况下,问题被错误标记)。