我需要创建一个结构wordStruct
的动态数组,它包含一个字符串及其在文本文件中出现的次数:
typedef struct wordStruct{
char word[50];
int count = 0;
}wordStruct;
我会从阅读文件中的单词数量中得到我需要的数字,我们称之为wordCount
。
struct wordStruct *wordList;
wordList = (wordStruct *)malloc(wordCount * sizeof(wordStruct));
这是为struct
数组分配内存的正确方法吗? calloc()
会更好吗?
int wordListIndex = 0;
char[50] inWord; // No word will be more than 49 characters + null terminator
for (i = 0; i < wordCount; i++){
fscanf(data, "%s", inWord);
for (j = 0; j < wordCount; j++){
if (strcmp(wordList[j].word, inWord) == 0){
wordList[j].count++;
break;
}
}
if (j == wordCount){
strcpy(wordList[wordListIndex].word, inWord)
wordListIndex++;
}
我知道这可能不是最有效的代码,但我有正确的想法吗?我可以使用strcmp()
方法,即使这些数组位置中可能没有任何数据吗?我是结构新手,我不确定我能做什么,不能做什么。
感谢。
答案 0 :(得分:1)
如果您使用malloc
,则需要初始化数组(例如,使用memset
)。如果使用calloc
,则数组会初始化为0。
初始化数组后,可以在其上使用strcmp
,因为将其设置为0会使所有单词都为零长度(空)字符串。在初始化之前,您不能使用strcmp
。
(我假设在您的SO问题中,奇怪的char[50] varname
而不是char varname[50]
是拼写错误,否则这将无法编译。我也忽略了fscanf
中的缓冲区溢出和strcpy
......从技术上讲,我想我不是。而且缺乏错误处理。)
答案 1 :(得分:0)
嵌套的for循环应该使用wordListIndex作为边界条件,最后的if块应该从内部for循环中取出。条件应该是
if (j == wordListIndex){
strcpy(wordList[wordListIndex].word, inWord)
wordListIndex++;
}