char数组不可赋值

时间:2015-01-09 19:04:11

标签: c arrays char

好的,所以我想在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 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 */ 
    }
}

它给了我以下错误:

damagecalc.c:44:13: error: expected identifier
                        class -> "warrior";
                                 ^
damagecalc.c:49:10: error: array type 'char [30]' is not assignable
                        class = "mage";
                        ~~~~~ ^
damagecalc.c:54:10: error: array type 'char [30]' is not assignable
                        class = "ranger";
                        ~~~~~ ^
damagecalc.c:58:10: error: array type 'char [30]' is not assignable
                        class = "warlock";
                        ~~~~~ ^
4 errors generated.

我知道我可以在字符串比较之后打印出类名,但这件事真的让我烦恼,我想知道为什么它不起作用。

PS:请原谅我可能做的任何明显错误,我刚刚在uC工作了几年之后就进入了PC编程。

4 个答案:

答案 0 :(得分:13)

char数组不可分配,因为所有数组都不是。您应该使用strcpy例如

strcpy(class, "Warrior");

等等。

此外,您不需要声明char class[30];我在您的代码中看到的最长字符串"undefined"所以

char class[10];

应该没问题,9 + {1}}个字符终止字节"undefined"

你应该用'\0'这种方式防止缓冲区溢出

scanf

因为您只想阅读scanf("%1s", class); 字符,所以比较应该更简单

1

甚至thsi会更具可读性

if (class[0] == 'M')
    strcpy(class, "Mage");

并最终检查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

答案 1 :(得分:3)

看到这不仅仅是对于字符数组,这意味着对于所有类型的数组但是问题为什么?,当我们可以分配其他变量时为什么不是数组的东西是: -  假设我们有:

int a[size];
a = {2,3,4,5,6};

因为这里的数组名称是数组第一个位置的平均地址

printf("%p",a); // let suppose the output is 0x7fff5fbff7f0

我们说的是

0x7fff5fbff7f0 =某事; 这是不正确的  是的,我们可以做[0] =某事,现在它说在第0个位置分配数组的值。

答案 2 :(得分:1)

 class = "Ranger";

应该是

strcpy(class,"Ranger");

在所有地方修复相同的内容。 char数组不可赋值

答案 3 :(得分:0)

class = "Warrior";切换为strcpy(class, "warrior");

class = "Mage";切换为strcpy(class, "Mage");

class = "Ranger";切换为strcpy(class, "Ranger");

class = "undefined";切换为strcpy(class, "undefined");

它应该有效!