如何创建静态字符串数组并召唤它们?

时间:2014-03-17 13:38:47

标签: c arrays database string

尝试在程序开始时做hangman游戏并创建我的单词数据库。然后用rand func i int召唤像str [i]。

  1. 使用下面的代码,它会将无效的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";
    

4 个答案:

答案 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中的单词更不容易出错。