将数组放入Dev-cpp中的头文件

时间:2016-01-09 15:33:11

标签: c

这是我的头文件,它基本上从列表中生成一个随机单词,然后找到单词的长度,然后将信息发送回主代码。

int WordDevelopment()
{    
char words[10][15] =
{
    "seanna",//6        //0
    "yellow",//6        //1
    "marshmallow",//11  //2
    "potato",//6        //3
    "beach",//5         //4
    "icecream",//8      //5
    "seven",//5         //6
    "giraffe",//7       //7
    "random",//6        //8
    "xylophone",//9     //9
};

//Generates random word
srand (time(NULL));
int randomIndex = rand() % 10;
int x = 0;
int a;
int randvar = 0;
randvar = rand();
randomIndex = randvar % 10;
printf("Row: %d\n",randomIndex);

//Stores the whole word in the word array
char word[15];
for(a=0; a<15; a++)
{
    word[a]=words[randomIndex][a];
}
printf("word: %s\n",word);

//Finds the word length
int wordlength = strlen(words[randomIndex]);
printf("word length: %d\n",wordlength);
}

我想知道如何正确地将数组放在此头文件的顶部,并能够从我的主代码中的头文件中访问变量。

1 个答案:

答案 0 :(得分:2)

头文件旨在包含由不同源文件使用的变量和函数原型的声明

在头文件中,您将变量声明为extern:

<强> header.h:

extern char word[15];

然后,实际定义变量 word 的源文件和引用它的源文件必须在开头包含 header.h

<强> source1.c:

#include "header.h"

要使变量 word 可见,请将其声明为全局变量,例如,您可以在 main.c 文件中定义它:

#include <stdio.h>
....
#include "header.h"

char word[15];

然后它将对链接的所有其他对象可见。

有关进一步说明,请参阅此示例post

我不确定我是否完全理解您在代码中尝试做的事情(我希望这只是一个测试代码或练习)但是, 如果你只需要变量单词可见(而不是单词)那么我会在包含 main()的文件中定义它们。 将单词声明为全局,并在头文件中声明为extern。

主要源文件应如下所示:

#include <stdio.h>
....
#include "header.h"

char word[15];

int main () {

...

    char words[10][15] = { "seanna", "yellow", "marshmallow", "potato", "beach", "icecream", "seven", "giraffe", "random", "xylophone" };

...

    for(a = 0; a < 15; a++)
    {
        word[a] = words[randomIndex][a];
    }

...

return 0;
}

修改

如果您只需要从数组中选择一个随机词单词,那么最好使用如下所示的方法:

char *words[10] = { "seanna", "yellow", "marshmallow", "potato", "beach", "icecream", "seven", "giraffe", "random", "xylophone" };
char *word;

int main()
{
    int idx = -1;

    srand (time(NULL));
    idx = rand() % 10;
    printf("Row: %d\n", idx);

    //Stores the whole word in the word array
    word = one_word(idx);
    printf("word: %s\n", word);

    //Finds the word length
    int wordlength = strlen(word);
    printf("word length: %d\n", wordlength);

    return 0;
}

当定义单词并将其指定为字符串文字数组时,您不必指定大小,它将自动计算并添加nul(终止)字符。然后,如果您不需要修改单词,则只需使用指向当前提取单词的指针即可。否则要复制这个词我建议你使用memcpy(不要复制一个char)。

word = malloc(16 * sizeof(char)); // 15 + 1 for the terminating char 
wordlen = strlen(words[idx]) + 1; // copy also the terminating char 
memcpy(word, words[idx], wordlen * sizeof(char))

(这里你应该删除sizeof(char),因为它总是1,我把它放在那里只是为了表明memcpy需要一个size_t字段)

以上单词单词被声明为全局,并且对于所有函数以及其他源文件都是可见的,如果在引用它们的那些文件中,您声明它们在开头为 extern (或使用如上所述的头文件)。