好的,所以我想在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编程。答案 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");
它应该有效!