在malloc之后访问结构数组的内容

时间:2013-01-25 04:55:43

标签: c arrays struct char malloc

我正在尝试将每个单词的单词和数字存储在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之前是否需要初始化?

3 个答案:

答案 0 :(得分: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 );

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

首先,最后一行应为

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

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

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

words[0].num = 0; // or any values you please, really
words[0].str[0] = '\0';