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