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