尝试在程序开始时做hangman游戏并创建我的单词数据库。然后用rand func i int召唤像str [i]。
使用下面的代码,它会将无效的CONVERSİON从CHAR提供给CONSTANT CHAR
char str[19];
char temp[1000];
char c[1];
int ErrorCount=5;
int i,j=0;
i=rand()%19;
str[0]="literature";
str[1]="scholar";
str[2]="enormous";
str[3]="influence";
str[4]="orchestra";
str[5]="publication";
str[6]="teacher";
str[7]="member";
str[8]="final";
str[9]="phonograph";
str[10]="striking";
str[11]="different";
str[12]="screwdriver";
str[13]="intelligient";
str[14]="executed";
str[15]="oldest";
str[16]="people";
str[17]="requiring";
str[18]="pioneer";
str[19]="telephone";
答案 0 :(得分:2)
char str[19];
上述语句将str
定义为19
个字符的数组。在以下声明中
str[0] = "literature";
字符串文字"literature"
计算指向其第一个元素的指针,该元素的类型为char *
。此指针分配给str[0]
,其类型为char
。这解释了您收到的错误消息。您应该将str
定义为指向字符的指针数组。字符串文字在C
中不是const限定的,因此尝试修改它们不会导致编译错误,但会导致未定义的行为,并且很可能是程序崩溃。因此,应将str
定义为指向常量对象的指针数组。
const char *str[19];
str[0] = "literature";
如果要将字符串文字复制到数组中,则应将str
定义为字符数组数组。稍后,您可以使用标准库函数strcpy
来复制字符串文字。
#define MAX_LEN 50+1 // +1 for the terminating null byte
char strlist[19][MAX_LEN];
strcpy(strlist[0], "literature");
答案 1 :(得分:0)
有了这个:
char str[20];
你声明了一个字符数组,而不是“字符串”,它们是C中的字符数组。也就是说,要存储一个包含多个字符串数组的数组,你需要一个2d的字符数组,所以类似于:
char str[20][100];
上面将创建一个2d数组,您可以在其中容纳20个99个字符长的数组(“字符串”),每个数组的末尾都有空终止符。
如果您希望能够拥有任意长的字符串(2d char
数组的第二维),则可以使用char *
char *[20];
然后,您可以将每个“字符串”初始化为:
str[0]="literature";
str[1]="scholar";
str[2]="enormous";
str[3]="influence";
str[4]="orchestra";
str[5]="publication";
str[6]="teacher";
str[7]="member";
str[8]="final";
str[9]="phonograph";
str[10]="striking";
str[11]="different";
str[12]="screwdriver";
str[13]="intelligient";
str[14]="executed";
str[15]="oldest";
str[16]="people";
str[17]="requiring";
str[18]="pioneer";
str[19]="telephone";
答案 2 :(得分:0)
正如其他人所指出的,您尝试将字符串(即字符数组)分配给char类型的数组条目。由于您希望将数组用作数据库,因此可以一次性定义和初始化数组:
const char *words[20] = {
"literature", "scholar", "enormous", "influence", "orchestra",
"publication", "teacher", "member", "final", "phonograph",
"striking", "different", "screwdriver", "intelligient",
"executed", "oldest", "people", "requiring", "pioneer",
"telephone"
};
此数组中的单词是const char *
类型的字符串文字;他们是不变的。如果你想对它们进行处理,你必须先复制一份,也许是通过strcpy
将字符复制到本地字符缓冲区。
答案 3 :(得分:0)
其他答案涉及str
误解的具体问题,但您也可以考虑:
const char* str[] = {
"literature",
"scholar",
"enormous",
/* ... */
"requiring",
"pioneer",
"telephone"
};
const size_t n_str = sizeof(str)/sizeof(char *);
/* etc. etc. */
i = rand() % n_str;
这样做的好处是可以消除幻数19
和带有文字索引的列表。这使得添加和删除str
中的单词更不容易出错。