gpt4 book ai didi

创建将单词添加到字典中的函数

转载 作者:行者123 更新时间:2023-11-30 19:17:34 26 4
gpt4 key购买 nike

我想创建将单词添加到字典中的函数

到目前为止我做到了

void addWord(char **dictionary,int *dictionarySize,int *wordsInDictionary,char *word){
if(dictionary == NULL)
{
*dictionary = (char *)malloc(sizeof(char*)*(*dictionarySize));
}
else
{
if(*wordsInDictionary==*dictionarySize)
{
*dictionary = (char *)realloc(dictionary,sizeof(char*)*(*dictionarySize)*2);
(*dictionarySize)*=2;
}
}
dictionary[*wordsInDictionary]=word;
(*wordsInDictionary)++;

}

在 main() 中我有

int i;
int dictSize = 1;
int wordsInDict = 0;
char *word;
char *dictionary;
dictionary=NULL;

然后我想打印字典中的所有单词,但在这里我收到警告,%s 期待 char* 但它是 int

printf("Stats: dictsize: %d, words in dict: %d\n", dictSize,wordsInDict);
for(i=0;i<wordsInDict;i++)
{
printf("%d. %s\n",i, dictionary[i]);
}

当我尝试添加单词时,它也会给我错误

我使用此调用来添加单词

addWord(&dictionary,&dictSize,&wordsInDict,word);

最佳答案

在您的 addWord 函数中,dictionary永远NULL

这只是问题的开始。因为您希望字典是数组的数组,这意味着您需要将其声明为指向指针的指针(如果您希望它是动态的)。但是,您将其声明为一个(单个)指针。您需要在 main 函数(或您最初声明它的任何地方)中将其声明为指向指针的指针。 并且您需要初始化它,否则它将具有不确定的值,并且以初始化以外的任何方式使用它都会导致 undefined behavior .

这意味着您的 addWord 函数应该采用一个指向另一个指针的指针,即多一层间接。并且需要使用解引用运算符来获取指向指针的原始指针。

因此 addWord 函数应该像这样启动

void addWord(char ***dictionary, int *dictionarySize, int *wordsInDictionary,char *word){
if(*dictionary == NULL)
{
*dictionary = malloc(sizeof(char*) * (*dictionarySize));
}
...
}

另请注意,我 don't cast the return of malloc .

另请注意,realloc可能失败,然后将返回NULL,因此,如果您将返回值分配给同一指针,则您将重新分配会丢失原来的指针。始终使用临时指针作为 realloc 的返回值,并仅在检查重新分配成功后才分配给真实指针。

关于创建将单词添加到字典中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28001039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com