0

我正在尝试将每个单词的单词和数量存储在一个数组中struct word

struct word{
    char str[MAX_WORD_LENGTH];
    int num;
}

inputFile = fopen("wordstat.txt", mode);
if(inputFile == NULL){
    printf("Cannot open file\n");
    return 1;
}

//scan through file to count number of possible words
while(fscanf(inputFile, "%s", scan)){
    wordCount++;
}

rewind(inputFile);

struct word *words = malloc(wordCount * (sizeof *words));

如何访问字符串并将其存储到成员变量 str 中?在我做malloc之前是否需要初始化?

4

3 回答 3

1
struct word *words = malloc(wordCount * (sizeof *words));

有效地创建一个一维word结构数组,您可以使用数组表示法访问它:words[i].str或指针表示法(words + i)->str以访问条目“i”。

要存储一串字符(例如从您的scanf调用中返回),请将它们复制到您的一个word结构中

fscanf( inputFile, "%s", scan );
strncpy( words[i].str, scan, MAX_WORD_LENGTH );

struct word当您执行 malloc 时,会分配每个字符串的内存。

于 2013-01-25T05:04:43.627 回答
0

您可以words作为指针或数组访问:

words[0]

是第一个结构。

words[0].str

是第一个字。并遍历所有单词:

for (int iWord = 0; iWord < wordCount; ++iWord)
{
    // words[iWord] is the current word
    printf("%s", words[iWord].str);
}

如果您更喜欢指针(在这种情况下我不喜欢),那么:

(words+5)->str

这是第 6 个单词吗(记住我们从 0 开始编号)。但是你可能会使用这样的指针:

for (struct word *pWord = words; pWord < words+wordCount; ++pWord)
{
    // pWord is the current word
    printf("%s", pWord->str);
}
于 2013-01-25T05:00:48.620 回答
0

首先,最后一行应该是

struct word *words = malloc(wordCount * sizeof(word));

您需要单词结构的大小,而不是您在这一行声明的变量...

除此之外,您需要做的是将每个结构初始化words为一些合理的默认值,如下所示:

words[0].num = 0; // or any values you please, really
words[0].str[0] = '\0';
于 2013-01-25T05:02:54.617 回答