C 字符数组不可分配

C 字符数组不可分配,c,arrays,char,C,Arrays,Char,好的,我想在字符数组中保存一个单词,但它给了我一个错误 这是我的密码 #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> int main(void) { char yesno[30] = "n"; //yes/no answer char class[30] = "undefined";//choosen cla

好的,我想在字符数组中保存一个单词,但它给了我一个错误

这是我的密码

#include <stdio.h>
#include <time.h> 
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char yesno[30] = "n";        //yes/no answer
    char class[30] = "undefined";//choosen class 
    int classchoosen = 0;        

    /* initialize random seed: */
    srand ( time(NULL) );

    printf("Welcome, which class do you wanna play with? \n");
    printf("Type W for Warrior, M for Mage or R for Ranger. Then press Enter\n");
    while(classchoosen == 0)
    {
        scanf("%s", class);
        if(strcmp(class, "W") == 0)
        {
            classchoosen = 1; 
            class = "Warrior";
        }
        if(strcmp(class, "M") == 0)
        {
            classchoosen = 1; 
            class = "Mage";
        }
        if(strcmp(class, "R") == 0)
        {
            classchoosen = 1; 
            class = "Ranger";
        }
        if(classchoosen == 0)
        {
            class = "undefined";
        }
        printf("So you wanna play as a %s? Enter y/n", class);
        classchoosen = 0; //For testing, remove later 

    }
    while(1)
    {
        /* Irrelevant stuff */ 
    }
}
我知道我可以在字符串比较之后打印出类名,但是这件事真的让我很困扰,我想知道为什么它不起作用


PS:请原谅我可能犯的任何明显错误,我在坎特伯雷大学工作了几年后,最近才进入电脑编程领域

Yes
char
数组不可赋值,就像所有数组不可赋值一样。例如,您应该使用strcpy

strcpy(class, "Warrior");
等等

另外,您不需要声明
char类[30]我在代码中看到的最长字符串是
“undefined”
so

char class[10];
应该可以,
9个
字符的
“未定义”
+1个空终止字节
'\0'

您应该用
scanf
这样防止缓冲区溢出

scanf("%1s", class);
由于您只想读取
1
字符,因此比较也应该更简单

if (class[0] == 'M')
    strcpy(class, "Mage");
甚至thsi也更具可读性

classchosen = 1;
switch (class[0])
{
case 'M':
    strcpy(class, "Mage");
    break;
case 'R':
    strcpy(class, "Ranger");
    break;
case 'W':
    strcpy(class, "Warrior");
    break;
default:
    classchosen = 0;
}
最后检查
scanf
是否实际成功,它返回匹配的参数数,因此在您的情况下,检查如下

if (scanf("%1s", class) == 1) ...
应该是

strcpy(class,"Ranger");
在所有地方都安装相同的。字符数组是不可分配的

开关
class=“Warrior”
strcpy(类,“战士”)

开关
class=“Mage”
strcpy(等级,“Mage”)

开关
class=“Ranger”至<代码>strcpy(等级,“Ranger”)

开关
class=“未定义”
strcpy(类别,“未定义”)


它应该会起作用

这不仅适用于字符数组,这意味着适用于所有类型的数组,还有问题aries why?,当我们可以分配其他变量why not array时,问题是:- 假设我们有:

int a[size];
a = {2,3,4,5,6};
因为这里数组的名称表示数组第一个位置的地址

printf("%p",a); // let suppose the output is 0x7fff5fbff7f0
我们是这样说的

0x7fff5fbff7f0=某物; 这是不对的
是的,我们可以做一个[0]=什么,现在它说在第0个位置分配数组的值。

是的,也谢谢您的回答。奇怪的是,经过大约一个小时的研究,我从未在任何地方发现过这个。我真的开始怀疑我的谷歌搜索能力了。我一回答这个问题就把它标记为已解决can@Luxuspunch没问题,但这是在c中处理字符串的基础。现在我知道了。在坎特伯雷大学的《我编程》中,我们从未使用过字符串,这可能是我不太熟悉它的原因。@Luxuspunch用谷歌搜索这些东西并不容易,但我向你保证每天都有很多类似的问题被问到,我已经回答了很多问题,其中的问题正是这一个。@luxpunch查看一些改进代码的建议。@luxpunch如果您认为其中任何一个答案对您有帮助,您可以通过单击复选标记来接受答案,请参见。也许你已经知道了,但万一你不知道…对不起,我在吃东西。无论如何,非常感谢所有在这里做出贡献的人。当有人能帮助我或别人能帮助我时,总是让我高兴:)我也非常感谢你的改进。正如我在帖子中所说,这是一个早期版本,但我没有注意到我能把它清理得这么干净而不是
char yesno[30]=“n”
int a[size];
a = {2,3,4,5,6};
printf("%p",a); // let suppose the output is 0x7fff5fbff7f0